ETH Price: $3,352.83 (+0.84%)

Contract

0xEe4e158c03A10CBc8242350d74510779A364581C
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Mint165910222023-02-09 11:53:47652 days ago1675943627IN
0xEe4e158c...9A364581C
0 ETH0.0026088318.92080659
Mint165062362023-01-28 15:33:23664 days ago1674920003IN
0xEe4e158c...9A364581C
0 ETH0.004868414.89347202
Mint164995082023-01-27 17:01:23665 days ago1674838883IN
0xEe4e158c...9A364581C
0 ETH0.0105420167.91090981
Mint164643732023-01-22 19:16:11670 days ago1674414971IN
0xEe4e158c...9A364581C
0 ETH0.0067708122.23372502
Mint163972862023-01-13 10:29:59680 days ago1673605799IN
0xEe4e158c...9A364581C
0 ETH0.0024447916.1275711
Mint163972712023-01-13 10:26:59680 days ago1673605619IN
0xEe4e158c...9A364581C
0 ETH0.0023468715.481641
Mint163972602023-01-13 10:24:47680 days ago1673605487IN
0xEe4e158c...9A364581C
0 ETH0.0025074916.54120926
Mint163943612023-01-13 0:41:35680 days ago1673570495IN
0xEe4e158c...9A364581C
0 ETH0.0029746717.99986239
Mint163937682023-01-12 22:42:11680 days ago1673563331IN
0xEe4e158c...9A364581C
0 ETH0.0038601723.35661142
Mint163932842023-01-12 21:04:47680 days ago1673557487IN
0xEe4e158c...9A364581C
0 ETH0.0052757223.5
Mint163926602023-01-12 18:59:23680 days ago1673549963IN
0xEe4e158c...9A364581C
0 ETH0.0057200537
Mint163926512023-01-12 18:57:35680 days ago1673549855IN
0xEe4e158c...9A364581C
0 ETH0.0051016633
Mint163926412023-01-12 18:55:35680 days ago1673549735IN
0xEe4e158c...9A364581C
0 ETH0.0054108635
Mint163926212023-01-12 18:51:23680 days ago1673549483IN
0xEe4e158c...9A364581C
0 ETH0.0050482830
Mint162975422022-12-30 12:19:35693 days ago1672402775IN
0xEe4e158c...9A364581C
0 ETH0.0039253116
Mint162493952022-12-23 19:04:11700 days ago1671822251IN
0xEe4e158c...9A364581C
0 ETH0.0053694220.15216511
Mint162479812022-12-23 14:20:47700 days ago1671805247IN
0xEe4e158c...9A364581C
0 ETH0.0031299313.94411968
Mint162355232022-12-21 20:39:59702 days ago1671655199IN
0xEe4e158c...9A364581C
0 ETH0.0035240414.00515222
Mint162261432022-12-20 13:15:35703 days ago1671542135IN
0xEe4e158c...9A364581C
0 ETH0.0042473813.18644813
Mint161887132022-12-15 7:50:47709 days ago1671090647IN
0xEe4e158c...9A364581C
0 ETH0.0039861913.74663938
Mint161403412022-12-08 13:39:11715 days ago1670506751IN
0xEe4e158c...9A364581C
0 ETH0.0020058813.23390599
Mint161403192022-12-08 13:34:47715 days ago1670506487IN
0xEe4e158c...9A364581C
0 ETH0.0032071513.54379888
Mint160276742022-11-22 19:37:47731 days ago1669145867IN
0xEe4e158c...9A364581C
0 ETH0.0042919119.01341753
Mint159963762022-11-18 10:43:23736 days ago1668768203IN
0xEe4e158c...9A364581C
0 ETH0.0040874212.50521323
Mint159795402022-11-16 2:14:47738 days ago1668564887IN
0xEe4e158c...9A364581C
0 ETH0.0025951816.71799188
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UserProxy

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 7500 runs

Other Settings:
default evmVersion
File 1 of 8 : UserProxy.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

import "./interfaces/IERC20.sol";
import "./interfaces/IERC20Permit.sol";
import "./interfaces/ITranche.sol";
import "./interfaces/IWETH.sol";
import "./interfaces/IWrappedPosition.sol";
import "./libraries/Authorizable.sol";

/// @author Element Finance
/// @title User Proxy
contract UserProxy is Authorizable {
    // This contract is a convenience library to consolidate
    // the actions needed to create interest or principal tokens to one call.
    // It will hold user allowances, and can be disabled by authorized addresses
    // for security.
    // If frozen users still control their own tokens so can manually redeem them.

    // Store the accessibility state of the contract
    bool public isFrozen = false;
    // Constant wrapped ether address
    IWETH public immutable weth;
    // Tranche factory address for Tranche contract address derivation
    address internal immutable _trancheFactory;
    // Tranche bytecode hash for Tranche contract address derivation.
    // This is constant as long as Tranche does not implement non-constant constructor arguments.
    bytes32 internal immutable _trancheBytecodeHash;
    // A constant which represents ether
    address internal constant _ETH_CONSTANT = address(
        0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
    );

    /// @dev Marks the msg.sender as authorized and sets them
    ///      as the owner in authorization library
    /// @param _weth The constant weth contract address
    /// @param __trancheFactory Address of the TrancheFactory contract
    /// @param __trancheBytecodeHash Hash of the Tranche bytecode.
    constructor(
        IWETH _weth,
        address __trancheFactory,
        bytes32 __trancheBytecodeHash
    ) Authorizable() {
        _authorize(msg.sender);
        weth = _weth;
        _trancheFactory = __trancheFactory;
        _trancheBytecodeHash = __trancheBytecodeHash;
    }

    /// @dev Requires that the contract is not frozen
    modifier notFrozen() {
        require(!isFrozen, "Contract frozen");
        _;
    }

    /// @dev Allows an authorized address to freeze or unfreeze this contract
    /// @param _newState True for frozen and false for unfrozen
    function setIsFrozen(bool _newState) external onlyAuthorized() {
        isFrozen = _newState;
    }

    // Memory encoding of the permit data
    struct PermitData {
        IERC20Permit tokenContract;
        address who;
        uint256 amount;
        uint256 expiration;
        bytes32 r;
        bytes32 s;
        uint8 v;
    }

    /// @dev Takes the input permit calls and executes them
    /// @param data The array which encodes the set of permit calls to make
    modifier preApproval(PermitData[] memory data) {
        // If permit calls are provided we make try to make them
        if (data.length != 0) {
            // We make permit calls for each indicated call
            for (uint256 i = 0; i < data.length; i++) {
                _permitCall(data[i]);
            }
        }
        _;
    }

    /// @dev Makes permit calls indicated by a struct
    /// @param data the struct which has the permit calldata
    function _permitCall(PermitData memory data) internal {
        // Make the permit call to the token in the data field using
        // the fields provided.
        // Security note - This fairly open call is safe because it cannot
        // call 'transferFrom' or other sensitive methods despite the open
        // scope. Do not make more general without security review.
        data.tokenContract.permit(
            msg.sender,
            data.who,
            data.amount,
            data.expiration,
            data.v,
            data.r,
            data.s
        );
    }

    /// @notice Mints a Principal/Interest token pair from either underlying token or Eth
    ///      then returns the tokens to the caller.
    /// @dev This function assumes that it already has an allowance for the token in question.
    /// @param _amount The amount of underlying to turn into tokens
    /// @param _underlying Either (1) The underlying ERC20 token contract
    ///                   or (2) the _ETH_CONSTANT to indicate the user has sent eth.
    ///                   This token should revert in the event of a transfer failure.
    /// @param _expiration The expiration time of the Tranche contract
    /// @param _position The contract which manages pooled deposits
    /// @param _permitCallData Encoded array of permit calls to make prior to minting
    ///                        the data should be encoded with abi.encode(data, "PermitData[]")
    ///                        each PermitData struct provided will be executed as a call.
    ///                        An example use of this is if using a token with permit like USDC
    ///                        to encode a permit which gives this contract allowance before minting.
    /// @return returns the minted amounts of PT and YT
    // NOTE - It is critical that the notFrozen modifier is listed first so it gets called first.
    function mint(
        uint256 _amount,
        IERC20 _underlying,
        uint256 _expiration,
        address _position,
        PermitData[] calldata _permitCallData
    )
        external
        payable
        notFrozen()
        preApproval(_permitCallData)
        returns (uint256, uint256)
    {
        // If the underlying token matches this predefined 'ETH token'
        // then we create weth for the user and go from there
        if (address(_underlying) == _ETH_CONSTANT) {
            // Check that the amount matches the amount provided
            require(msg.value == _amount, "Incorrect amount provided");
            // Create weth from the provided eth
            weth.deposit{ value: msg.value }();
            weth.transfer(address(_position), _amount);
        } else {
            // Check for the fact that this branch should not be payable
            require(msg.value == 0, "Non payable");
            // Move the user's funds to the wrapped position contract
            _underlying.transferFrom(msg.sender, address(_position), _amount);
        }

        // Proceed to internal minting steps
        (uint256 ptMinted, uint256 ytMinted) = _mint(_expiration, _position);
        // This sanity check ensure that at least as much was minted as was transferred
        require(ytMinted >= _amount, "Not enough minted");
        return (ptMinted, ytMinted);
    }

    /// @dev Allows a user to withdraw and unwrap weth in the same transaction
    ///      likely quite a bit more expensive than direct unwrapping but useful
    ///      for those who want to do one tx instead of two
    /// @param _expiration The tranche expiration time
    /// @param _position The contract which interacts with the yield bearing strategy
    /// @param _amountPT The amount of principal token to withdraw
    /// @param _amountYT The amount of yield token to withdraw.
    /// @param _permitCallData Encoded array of permit calls to make prior to withdrawing,
    ///                        should be used to get allowances for PT and YT
    // NOTE - It is critical that the notFrozen modifier is listed first so it gets called first.
    function withdrawWeth(
        uint256 _expiration,
        address _position,
        uint256 _amountPT,
        uint256 _amountYT,
        PermitData[] calldata _permitCallData
    ) external notFrozen() preApproval(_permitCallData) {
        // Post the Berlin hardfork this call warms the address so only cost ~100 gas overall
        require(IWrappedPosition(_position).token() == weth, "Non weth token");
        // Only allow access if the user is actually attempting to withdraw
        require(((_amountPT != 0) || (_amountYT != 0)), "Invalid withdraw");
        // Because of create2 we know this code is exactly what is expected.
        ITranche derivedTranche = _deriveTranche(_position, _expiration);

        uint256 wethReceivedPt = 0;
        uint256 wethReceivedYt = 0;
        // Check if we need to withdraw principal token
        if (_amountPT != 0) {
            // If we have to withdraw PT first transfer it to this contract
            derivedTranche.transferFrom(msg.sender, address(this), _amountPT);
            // Then we withdraw that PT with the resulting weth going to this address
            wethReceivedPt = derivedTranche.withdrawPrincipal(
                _amountPT,
                address(this)
            );
        }
        // Check if we need to withdraw yield token
        if (_amountYT != 0) {
            // Post Berlin this lookup only costs 100 gas overall as well
            IERC20Permit yieldToken = derivedTranche.interestToken();
            // Transfer the YT to this contract
            yieldToken.transferFrom(msg.sender, address(this), _amountYT);
            // Withdraw that YT
            wethReceivedYt = derivedTranche.withdrawInterest(
                _amountYT,
                address(this)
            );
        }

        // A sanity check that some value was withdrawn
        if (_amountPT != 0) {
            require((wethReceivedPt != 0), "Rugged");
        }
        if (_amountYT != 0) {
            require((wethReceivedYt != 0), "No yield accrued");
        }
        // Withdraw the ether from weth
        weth.withdraw(wethReceivedPt + wethReceivedYt);
        // Send the withdrawn eth to the caller
        payable(msg.sender).transfer(wethReceivedPt + wethReceivedYt);
    }

    /// @dev The receive function allows WETH and only WETH to send
    ///      eth directly to this contract. Note - It Cannot be assumed
    ///      that this will prevent this contract from having an ETH balance
    receive() external payable {
        require(msg.sender == address(weth));
    }

    /// @dev This internal mint function performs the core minting logic after
    ///      the contract has already transferred to WrappedPosition contract
    /// @param _expiration The tranche expiration time
    /// @param _position The contract which interacts with the yield bearing strategy
    /// @return the principal token yield token returned
    function _mint(uint256 _expiration, address _position)
        internal
        returns (uint256, uint256)
    {
        // Use create2 to derive the tranche contract
        ITranche tranche = _deriveTranche(address(_position), _expiration);
        // Move funds into the Tranche contract
        // it will credit the msg.sender with the new tokens
        return tranche.prefundedDeposit(msg.sender);
    }

    /// @dev This internal function produces the deterministic create2
    ///      address of the Tranche contract from a wrapped position contract and expiration
    /// @param _position The wrapped position contract address
    /// @param _expiration The expiration time of the tranche
    /// @return The derived Tranche contract
    function _deriveTranche(address _position, uint256 _expiration)
        internal
        virtual
        view
        returns (ITranche)
    {
        bytes32 salt = keccak256(abi.encodePacked(_position, _expiration));
        bytes32 addressBytes = keccak256(
            abi.encodePacked(
                bytes1(0xff),
                _trancheFactory,
                salt,
                _trancheBytecodeHash
            )
        );
        return ITranche(address(uint160(uint256(addressBytes))));
    }

    /// @dev This contract holds a number of allowances for addresses so if it is deprecated
    ///      it should be removed so that users do not have to remove allowances.
    ///      Note - onlyOwner is a stronger check than onlyAuthorized, many addresses can be
    ///      authorized to freeze or unfreeze the contract but only the owner address can kill
    function deprecate() external onlyOwner() {
        selfdestruct(payable(msg.sender));
    }
}

File 2 of 8 : IERC20.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

interface IERC20 {
    function symbol() external view returns (string memory);

    function balanceOf(address account) external view returns (uint256);

    // Note this is non standard but nearly all ERC20 have exposed decimal functions
    function decimals() external view returns (uint8);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

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

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

File 3 of 8 : IERC20Permit.sol
// Forked from openzepplin
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit is IERC20 {
    /**
     * @dev Sets `value` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

File 4 of 8 : ITranche.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

import "./IERC20Permit.sol";
import "./IInterestToken.sol";

interface ITranche is IERC20Permit {
    function deposit(uint256 _shares, address destination)
        external
        returns (uint256, uint256);

    function prefundedDeposit(address _destination)
        external
        returns (uint256, uint256);

    function withdrawPrincipal(uint256 _amount, address _destination)
        external
        returns (uint256);

    function withdrawInterest(uint256 _amount, address _destination)
        external
        returns (uint256);

    function interestToken() external view returns (IInterestToken);

    function interestSupply() external view returns (uint128);
}

File 5 of 8 : IWETH.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

import "./IERC20.sol";

interface IWETH is IERC20 {
    function deposit() external payable;

    function withdraw(uint256 wad) external;

    event Deposit(address indexed dst, uint256 wad);
    event Withdrawal(address indexed src, uint256 wad);
}

File 6 of 8 : IWrappedPosition.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

import "./IERC20Permit.sol";
import "./IERC20.sol";

interface IWrappedPosition is IERC20Permit {
    function token() external view returns (IERC20);

    function balanceOfUnderlying(address who) external view returns (uint256);

    function getSharesToUnderlying(uint256 shares)
        external
        view
        returns (uint256);

    function deposit(address sender, uint256 amount) external returns (uint256);

    function withdraw(
        address sender,
        uint256 _shares,
        uint256 _minUnderlying
    ) external returns (uint256);

    function withdrawUnderlying(
        address _destination,
        uint256 _amount,
        uint256 _minUnderlying
    ) external returns (uint256, uint256);

    function prefundedDeposit(address _destination)
        external
        returns (
            uint256,
            uint256,
            uint256
        );
}

File 7 of 8 : Authorizable.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.7.0;

contract Authorizable {
    // This contract allows a flexible authorization scheme

    // The owner who can change authorization status
    address public owner;
    // A mapping from an address to its authorization status
    mapping(address => bool) public authorized;

    /// @dev We set the deployer to the owner
    constructor() {
        owner = msg.sender;
    }

    /// @dev This modifier checks if the msg.sender is the owner
    modifier onlyOwner() {
        require(msg.sender == owner, "Sender not owner");
        _;
    }

    /// @dev This modifier checks if an address is authorized
    modifier onlyAuthorized() {
        require(isAuthorized(msg.sender), "Sender not Authorized");
        _;
    }

    /// @dev Returns true if an address is authorized
    /// @param who the address to check
    /// @return true if authorized false if not
    function isAuthorized(address who) public view returns (bool) {
        return authorized[who];
    }

    /// @dev Privileged function authorize an address
    /// @param who the address to authorize
    function authorize(address who) external onlyOwner() {
        _authorize(who);
    }

    /// @dev Privileged function to de authorize an address
    /// @param who The address to remove authorization from
    function deauthorize(address who) external onlyOwner() {
        authorized[who] = false;
    }

    /// @dev Function to change owner
    /// @param who The new owner address
    function setOwner(address who) public onlyOwner() {
        owner = who;
    }

    /// @dev Inheritable function which authorizes someone
    /// @param who the address to authorize
    function _authorize(address who) internal {
        authorized[who] = true;
    }
}

File 8 of 8 : IInterestToken.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

import "./IERC20Permit.sol";

interface IInterestToken is IERC20Permit {
    function mint(address _account, uint256 _amount) external;

    function burn(address _account, uint256 _amount) external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 7500
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IWETH","name":"_weth","type":"address"},{"internalType":"address","name":"__trancheFactory","type":"address"},{"internalType":"bytes32","name":"__trancheBytecodeHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"deauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deprecate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"contract IERC20","name":"_underlying","type":"address"},{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"address","name":"_position","type":"address"},{"components":[{"internalType":"contract IERC20Permit","name":"tokenContract","type":"address"},{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"internalType":"struct UserProxy.PermitData[]","name":"_permitCallData","type":"tuple[]"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_newState","type":"bool"}],"name":"setIsFrozen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"address","name":"_position","type":"address"},{"internalType":"uint256","name":"_amountPT","type":"uint256"},{"internalType":"uint256","name":"_amountYT","type":"uint256"},{"components":[{"internalType":"contract IERC20Permit","name":"tokenContract","type":"address"},{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"internalType":"struct UserProxy.PermitData[]","name":"_permitCallData","type":"tuple[]"}],"name":"withdrawWeth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526002805460ff191690553480156200001b57600080fd5b5060405162001a3538038062001a358339810160408190526200003e91620000a9565b600080546001600160a01b031916339081179091556200005e9062000082565b6001600160601b0319606093841b81166080529190921b1660a05260c05262000109565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b600080600060608486031215620000be578283fd5b8351620000cb81620000f0565b6020850151909350620000de81620000f0565b80925050604084015190509250925092565b6001600160a01b03811681146200010657600080fd5b50565b60805160601c60a05160601c60c0516118d462000161600039600061101401526000610ff001526000818160e8015281816103e001528181610542015281816109f301528181610c480152610d0101526118d46000f3fe6080604052600436106100cb5760003560e01c80636f1ea24c11610074578063b841d2d21161004e578063b841d2d214610230578063b918161114610251578063fe9fbb801461027157610114565b80636f1ea24c146101db5780638da5cb5b146101fb578063b6a5d7de1461021057610114565b806333eeb147116100a557806333eeb1471461016e5780633fc8cef31461019957806364eda74b146101bb57610114565b80630fcc0c281461011957806313af40351461012e57806327c97fa51461014e57610114565b36610114573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461011257600080fd5b005b600080fd5b34801561012557600080fd5b50610112610291565b34801561013a57600080fd5b506101126101493660046111ec565b6102d4565b34801561015a57600080fd5b506101126101693660046111ec565b610352565b34801561017a57600080fd5b506101836103d5565b6040516101909190611582565b60405180910390f35b3480156101a557600080fd5b506101ae6103de565b60405161019091906114bc565b3480156101c757600080fd5b506101126101d636600461120f565b610402565b3480156101e757600080fd5b506101126101f6366004611333565b610458565b34801561020757600080fd5b506101ae610ab6565b34801561021c57600080fd5b5061011261022b3660046111ec565b610ad2565b61024361023e3660046113a4565b610b15565b6040516101909291906117e0565b34801561025d57600080fd5b5061018361026c3660046111ec565b610e9c565b34801561027d57600080fd5b5061018361028c3660046111ec565b610eb1565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102d15760405162461bcd60e51b81526004016102c8906115c4565b60405180910390fd5b33ff5b60005473ffffffffffffffffffffffffffffffffffffffff16331461030b5760405162461bcd60e51b81526004016102c8906115c4565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103895760405162461bcd60e51b81526004016102c8906115c4565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b33610eb1565b6104275760405162461bcd60e51b81526004016102c8906115fb565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60025460ff161561047b5760405162461bcd60e51b81526004016102c89061177c565b8181808060200260200160405190810160405280939291908181526020016000905b828210156104c9576104ba60e08302860136819003810190611263565b8152602001906001019061049d565b505050505080516000146105405760005b815181101561053e5761052c82828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610ee0565b8061053681611806565b9150506104da565b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f59190611247565b73ffffffffffffffffffffffffffffffffffffffff16146106285760405162461bcd60e51b81526004016102c890611669565b8415158061063557508315155b6106515760405162461bcd60e51b81526004016102c890611632565b600061065d8789610f76565b905060008087156107ba576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906106be90339030908d906004016114dd565b602060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610710919061122b565b506040517f884e17f300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063884e17f390610765908b9030906004016117bc565b602060405180830381600087803b15801561077f57600080fd5b505af1158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b7919061131b565b91505b86156109965760008373ffffffffffffffffffffffffffffffffffffffff1663764b666c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080857600080fd5b505afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108409190611247565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906323b872dd9061089990339030908d906004016114dd565b602060405180830381600087803b1580156108b357600080fd5b505af11580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb919061122b565b506040517f1210aac200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690631210aac290610940908b9030906004016117bc565b602060405180830381600087803b15801561095a57600080fd5b505af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610992919061131b565b9150505b87156109b957816109b95760405162461bcd60e51b81526004016102c8906116a0565b86156109dc57806109dc5760405162461bcd60e51b81526004016102c8906116d7565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632e1a7d4d610a2283856117ee565b6040518263ffffffff1660e01b8152600401610a3e91906117b3565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b503392506108fc9150610a81905083856117ee565b6040518115909202916000818181858888f19350505050158015610aa9573d6000803e3d6000fd5b5050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b095760405162461bcd60e51b81526004016102c8906115c4565b610b1281611079565b50565b600254600090819060ff1615610b3d5760405162461bcd60e51b81526004016102c89061177c565b8383808060200260200160405190810160405280939291908181526020016000905b82821015610b8b57610b7c60e08302860136819003810190611263565b81526020019060010190610b5f565b50505050508051600014610bf55760005b8151811015610bf357610be182828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80610beb81611806565b915050610b9c565b505b73ffffffffffffffffffffffffffffffffffffffff881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610d9357883414610c465760405162461bcd60e51b81526004016102c890611745565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cae57600080fd5b505af1158015610cc2573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250610d3b915089908d9060040161155c565b602060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d919061122b565b50610e5b565b3415610db15760405162461bcd60e51b81526004016102c89061158d565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8916906323b872dd90610e079033908a908e906004016114dd565b602060405180830381600087803b158015610e2157600080fd5b505af1158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061122b565b505b600080610e6889896110cb565b915091508a811015610e8c5760405162461bcd60e51b81526004016102c89061170e565b909a909950975050505050505050565b60016020526000908152604090205460ff1681565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff165b919050565b806000015173ffffffffffffffffffffffffffffffffffffffff1663d505accf338360200151846040015185606001518660c0015187608001518860a001516040518863ffffffff1660e01b8152600401610f41979695949392919061150e565b600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b5050505050565b6000808383604051602001610f8c929190611423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290528051602091820120925060009161103a917fff00000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000000000000000000000000000000000000000000009186917f00000000000000000000000000000000000000000000000000000000000000009101611458565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152919052805160209091012095945050505050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b60008060006110da8486610f76565b6040517f85f45c8800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906385f45c889061112f9033906004016114bc565b6040805180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611400565b92509250505b9250929050565b8035610edb8161186e565b60008083601f8401126111a9578182fd5b50813567ffffffffffffffff8111156111c0578182fd5b60208301915083602060e08302850101111561118657600080fd5b803560ff81168114610edb57600080fd5b6000602082840312156111fd578081fd5b81356112088161186e565b9392505050565b600060208284031215611220578081fd5b813561120881611890565b60006020828403121561123c578081fd5b815161120881611890565b600060208284031215611258578081fd5b81516112088161186e565b600060e08284031215611274578081fd5b60405160e0810181811067ffffffffffffffff821117156112bc577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b6040526112c88361118d565b81526112d66020840161118d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261130f60c084016111db565b60c08201529392505050565b60006020828403121561132c578081fd5b5051919050565b60008060008060008060a0878903121561134b578182fd5b86359550602087013561135d8161186e565b94506040870135935060608701359250608087013567ffffffffffffffff811115611386578283fd5b61139289828a01611198565b979a9699509497509295939492505050565b60008060008060008060a087890312156113bc578182fd5b8635955060208701356113ce8161186e565b94506040870135935060608701356113e58161186e565b9250608087013567ffffffffffffffff811115611386578283fd5b60008060408385031215611412578182fd5b505080516020909101519092909150565b60609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b7fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff97881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b6020808252600b908201527f4e6f6e2070617961626c65000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f53656e646572206e6f74206f776e657200000000000000000000000000000000604082015260600190565b60208082526015908201527f53656e646572206e6f7420417574686f72697a65640000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420776974686472617700000000000000000000000000000000604082015260600190565b6020808252600e908201527f4e6f6e207765746820746f6b656e000000000000000000000000000000000000604082015260600190565b60208082526006908201527f5275676765640000000000000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f4e6f207969656c64206163637275656400000000000000000000000000000000604082015260600190565b60208082526011908201527f4e6f7420656e6f756768206d696e746564000000000000000000000000000000604082015260600190565b60208082526019908201527f496e636f727265637420616d6f756e742070726f766964656400000000000000604082015260600190565b6020808252600f908201527f436f6e74726163742066726f7a656e0000000000000000000000000000000000604082015260600190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b918252602082015260400190565b600082198211156118015761180161183f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156118385761183861183f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b1257600080fd5b8015158114610b1257600080fdfea26469706673582212202a6013595f1f2bbde4be22920ab5b117ec00eb896d90b285f906d6e72567e74064736f6c63430008000033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c0f481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d

Deployed Bytecode

0x6080604052600436106100cb5760003560e01c80636f1ea24c11610074578063b841d2d21161004e578063b841d2d214610230578063b918161114610251578063fe9fbb801461027157610114565b80636f1ea24c146101db5780638da5cb5b146101fb578063b6a5d7de1461021057610114565b806333eeb147116100a557806333eeb1471461016e5780633fc8cef31461019957806364eda74b146101bb57610114565b80630fcc0c281461011957806313af40351461012e57806327c97fa51461014e57610114565b36610114573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461011257600080fd5b005b600080fd5b34801561012557600080fd5b50610112610291565b34801561013a57600080fd5b506101126101493660046111ec565b6102d4565b34801561015a57600080fd5b506101126101693660046111ec565b610352565b34801561017a57600080fd5b506101836103d5565b6040516101909190611582565b60405180910390f35b3480156101a557600080fd5b506101ae6103de565b60405161019091906114bc565b3480156101c757600080fd5b506101126101d636600461120f565b610402565b3480156101e757600080fd5b506101126101f6366004611333565b610458565b34801561020757600080fd5b506101ae610ab6565b34801561021c57600080fd5b5061011261022b3660046111ec565b610ad2565b61024361023e3660046113a4565b610b15565b6040516101909291906117e0565b34801561025d57600080fd5b5061018361026c3660046111ec565b610e9c565b34801561027d57600080fd5b5061018361028c3660046111ec565b610eb1565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102d15760405162461bcd60e51b81526004016102c8906115c4565b60405180910390fd5b33ff5b60005473ffffffffffffffffffffffffffffffffffffffff16331461030b5760405162461bcd60e51b81526004016102c8906115c4565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103895760405162461bcd60e51b81526004016102c8906115c4565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60025460ff1681565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b61040b33610eb1565b6104275760405162461bcd60e51b81526004016102c8906115fb565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60025460ff161561047b5760405162461bcd60e51b81526004016102c89061177c565b8181808060200260200160405190810160405280939291908181526020016000905b828210156104c9576104ba60e08302860136819003810190611263565b8152602001906001019061049d565b505050505080516000146105405760005b815181101561053e5761052c82828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610ee0565b8061053681611806565b9150506104da565b505b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f59190611247565b73ffffffffffffffffffffffffffffffffffffffff16146106285760405162461bcd60e51b81526004016102c890611669565b8415158061063557508315155b6106515760405162461bcd60e51b81526004016102c890611632565b600061065d8789610f76565b905060008087156107ba576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906106be90339030908d906004016114dd565b602060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610710919061122b565b506040517f884e17f300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063884e17f390610765908b9030906004016117bc565b602060405180830381600087803b15801561077f57600080fd5b505af1158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b7919061131b565b91505b86156109965760008373ffffffffffffffffffffffffffffffffffffffff1663764b666c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080857600080fd5b505afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108409190611247565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906323b872dd9061089990339030908d906004016114dd565b602060405180830381600087803b1580156108b357600080fd5b505af11580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb919061122b565b506040517f1210aac200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690631210aac290610940908b9030906004016117bc565b602060405180830381600087803b15801561095a57600080fd5b505af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610992919061131b565b9150505b87156109b957816109b95760405162461bcd60e51b81526004016102c8906116a0565b86156109dc57806109dc5760405162461bcd60e51b81526004016102c8906116d7565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216632e1a7d4d610a2283856117ee565b6040518263ffffffff1660e01b8152600401610a3e91906117b3565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b503392506108fc9150610a81905083856117ee565b6040518115909202916000818181858888f19350505050158015610aa9573d6000803e3d6000fd5b5050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b095760405162461bcd60e51b81526004016102c8906115c4565b610b1281611079565b50565b600254600090819060ff1615610b3d5760405162461bcd60e51b81526004016102c89061177c565b8383808060200260200160405190810160405280939291908181526020016000905b82821015610b8b57610b7c60e08302860136819003810190611263565b81526020019060010190610b5f565b50505050508051600014610bf55760005b8151811015610bf357610be182828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80610beb81611806565b915050610b9c565b505b73ffffffffffffffffffffffffffffffffffffffff881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610d9357883414610c465760405162461bcd60e51b81526004016102c890611745565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cae57600080fd5b505af1158015610cc2573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216935063a9059cbb9250610d3b915089908d9060040161155c565b602060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d919061122b565b50610e5b565b3415610db15760405162461bcd60e51b81526004016102c89061158d565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8916906323b872dd90610e079033908a908e906004016114dd565b602060405180830381600087803b158015610e2157600080fd5b505af1158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061122b565b505b600080610e6889896110cb565b915091508a811015610e8c5760405162461bcd60e51b81526004016102c89061170e565b909a909950975050505050505050565b60016020526000908152604090205460ff1681565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff165b919050565b806000015173ffffffffffffffffffffffffffffffffffffffff1663d505accf338360200151846040015185606001518660c0015187608001518860a001516040518863ffffffff1660e01b8152600401610f41979695949392919061150e565b600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b5050505050565b6000808383604051602001610f8c929190611423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290528051602091820120925060009161103a917fff00000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c09186917ff481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d9101611458565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152919052805160209091012095945050505050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b60008060006110da8486610f76565b6040517f85f45c8800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906385f45c889061112f9033906004016114bc565b6040805180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611400565b92509250505b9250929050565b8035610edb8161186e565b60008083601f8401126111a9578182fd5b50813567ffffffffffffffff8111156111c0578182fd5b60208301915083602060e08302850101111561118657600080fd5b803560ff81168114610edb57600080fd5b6000602082840312156111fd578081fd5b81356112088161186e565b9392505050565b600060208284031215611220578081fd5b813561120881611890565b60006020828403121561123c578081fd5b815161120881611890565b600060208284031215611258578081fd5b81516112088161186e565b600060e08284031215611274578081fd5b60405160e0810181811067ffffffffffffffff821117156112bc577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b6040526112c88361118d565b81526112d66020840161118d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261130f60c084016111db565b60c08201529392505050565b60006020828403121561132c578081fd5b5051919050565b60008060008060008060a0878903121561134b578182fd5b86359550602087013561135d8161186e565b94506040870135935060608701359250608087013567ffffffffffffffff811115611386578283fd5b61139289828a01611198565b979a9699509497509295939492505050565b60008060008060008060a087890312156113bc578182fd5b8635955060208701356113ce8161186e565b94506040870135935060608701356113e58161186e565b9250608087013567ffffffffffffffff811115611386578283fd5b60008060408385031215611412578182fd5b505080516020909101519092909150565b60609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b7fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff97881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b6020808252600b908201527f4e6f6e2070617961626c65000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f53656e646572206e6f74206f776e657200000000000000000000000000000000604082015260600190565b60208082526015908201527f53656e646572206e6f7420417574686f72697a65640000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420776974686472617700000000000000000000000000000000604082015260600190565b6020808252600e908201527f4e6f6e207765746820746f6b656e000000000000000000000000000000000000604082015260600190565b60208082526006908201527f5275676765640000000000000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f4e6f207969656c64206163637275656400000000000000000000000000000000604082015260600190565b60208082526011908201527f4e6f7420656e6f756768206d696e746564000000000000000000000000000000604082015260600190565b60208082526019908201527f496e636f727265637420616d6f756e742070726f766964656400000000000000604082015260600190565b6020808252600f908201527f436f6e74726163742066726f7a656e0000000000000000000000000000000000604082015260600190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b918252602082015260400190565b600082198211156118015761180161183f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156118385761183861183f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b1257600080fd5b8015158114610b1257600080fdfea26469706673582212202a6013595f1f2bbde4be22920ab5b117ec00eb896d90b285f906d6e72567e74064736f6c63430008000033

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

000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c0f481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d

-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : __trancheFactory (address): 0x62F161BF3692E4015BefB05A03a94A40f520d1c0
Arg [2] : __trancheBytecodeHash (bytes32): 0xf481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 00000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c0
Arg [2] : f481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.