Contract 0xbcb55BDb669E756e982169c19C20C987c26F3C2D

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x38651a96df822c8c703ac75f747674c332030bab40707b12a17d4cf81f414ee0Deposit419688122022-11-28 20:04:367 days 33 mins ago0x48fd50cef13da663250a8bfeb472f6e89b019e9e IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.00001 ETH0.00002948
0x5421b6e8f6d1e6d534a6c95e9b4b04183473226f5766a6ce9097e43f44eeea1bDeposit419679572022-11-28 20:00:147 days 38 mins ago0xfe5a976d3888f1c23927a7492726e13bb4d40ec7 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.015019090002396 ETH0.00002981
0x24c5e1cb9bf091dc462541d652b2d7ea8e2e487e846ec3ac3bc5776e77607c66Deposit419562772022-11-28 19:02:117 days 1 hr ago0x02f7396a406edd5ec98368f01f454035a228a867 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.00001 ETH0.00003294
0xc06f0acf260fe5b9cea7335d352da95fe7f67ef23a6c6aa19af338b495ff78acDeposit419499962022-11-28 18:31:007 days 2 hrs ago0x8e7b86cdd300942d41d9139ad7444eb97f5bdb56 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.0001 ETH0.00003625
0x7f8b0a84fa9cc59608e583a4d37ef0c3a20c1d3f5674166d3f1a6f157dc51197Deposit419319412022-11-28 17:04:497 days 3 hrs ago0x993f759b607bb3831e4d957fb7aedadd7447726f IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.001 ETH0.00004076
0x1c5cea1d3e96b350258ec0a01c49384eb223384ae414a282c450495f253a4b74Deposit418948612022-11-28 13:59:527 days 6 hrs ago0xaf4192b72fb039d095a3f495e21641e3b256fffb IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d2.7 ETH0.00002778
0xf045f403c34555a980f8cc0241866aa28e1ebec1fdc4596ec1e554c09143ccacRedeem418649922022-11-28 11:35:107 days 9 hrs ago0xcc93ba13a7d488d2514e0012bb82cb9f05938295 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0 ETH0.00003112
0x0d6f58cdc503548cfe5e0b6c73600134249279bd8f15bcab874dc9714fe6c2fcRedeem418501372022-11-28 10:16:507 days 10 hrs ago0x6299dbe5be8ed5d5df9ff5a21b485c7da0cf3476 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0 ETH0.00003088
0x37b9270f7aa176e4d313bc788498cdeca1b111826ada06fabd72102f6c19d45bDeposit418329822022-11-28 8:48:007 days 11 hrs ago0x581a13252af7f34ca6888646a24e2a0aaaba24d7 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.001 ETH0.00002247
0x9209521981408d2a48227f75e293a0209a1b7a3f203ea3aa1477437650ba8651Deposit418031352022-11-28 6:03:477 days 14 hrs ago0x5e91d547a6f279e6d59086e30e25c964efe4b463 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d7.277019092423466 ETH0.00002524
0x3cd5795a791e7693a628b38bfcef6b433545217d2da8421046adf9b9174fa2afRedeem418022312022-11-28 5:58:077 days 14 hrs ago0xb50aa6ee870952e3d7a1795c49c664e05c60cabd IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0 ETH0.00002799
0x6dd8867e1bcb2448edd3ca58edb34fd95bf88062c2863e8914a942579346bd8eDeposit417919482022-11-28 4:52:137 days 15 hrs ago0x630999eee371d5c96526344ea1e513f31afb113c IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.05 ETH0.00002491
0xfb3583015107aaf04f20a5404536d4160206dbc66d375083f2e4afd7c49a21a8Deposit417687382022-11-28 2:32:007 days 18 hrs ago0x1589e6acbecbb417e5132b5ed402eeacdfb100a0 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.01 ETH0.0000255
0x921680a5f9fd9af25857cd125c421cbebd21bd26c32c14b9e79da53d6752afbcDeposit417678492022-11-28 2:26:417 days 18 hrs ago0xc8f7f36a9ee24f359ebf9816fff319b239e947cb IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.2 ETH0.0000269
0xa045311a47a3af74717799900e335d8606a1a62d7849df6ecc188287b91842b2Deposit417370092022-11-27 23:09:477 days 21 hrs ago0xd57d2337a8f5cf7601a5c0790c08d88a5223d64d IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.02 ETH0.0000233
0xdb761b1180247db51448ac9a32bd7b2a9fe6e82bd8fc7795d6de9def9f3b3394Deposit417369362022-11-27 23:09:137 days 21 hrs ago0xd57d2337a8f5cf7601a5c0790c08d88a5223d64d IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d3.62 ETH0.00002474
0x95f11e323fb6de11e4fcd3aa052fa01818c381f3c72991230d9ef7cf048922feRedeem417333652022-11-27 22:43:317 days 21 hrs ago0x124a46cc6f73c1dd93a7dfa0ee211c6af2ac0666 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0 ETH0.0000289
0x4f1d7236538d88686b595afa2f10f6f0245e716e373798533731c41f605358d0Deposit417301112022-11-27 22:19:187 days 22 hrs ago0xe326bd9c5c4a0b207f91a074a020c32db692c2b9 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.0001 ETH0.00002588
0xbf60150b6ccec2d4681b38b6415bcc10daef413985c25a63e8fe314891d8fd37Redeem417277522022-11-27 22:04:067 days 22 hrs ago0x99bc76a4b0ae9ace9e898bd64f0a756fa3da8a0c IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0 ETH0.00002851
0x68fe9f5c7c9f43b58cf97f3b508830b4abd79e094ee6d2a346aa2e399fad416cDeposit417128212022-11-27 20:35:138 days 3 mins ago0x3109f020147d0daa21fb4ccb5555d31ec51bc4d5 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.0001 ETH0.00002821
0xbea254589bf24f866fa89eb3316d59baafd3ea512c8e85aa67fe963fa1d61134Deposit417096152022-11-27 20:16:088 days 22 mins ago0x5c6383566e789d534a499564b84e13fa66412906 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.415222883443653 ETH0.00002817
0x8d418a578d84859c984a7382db8c04360cfaf61e67a5745e519826977586ced7Deposit417087042022-11-27 20:10:068 days 28 mins ago0x5c6383566e789d534a499564b84e13fa66412906 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.342063288701841 ETH0.0000291
0x44190fb2238d4f47f32884bd11bca35d9e3dff1db8471f8e9b0f55bb2a1584beRedeem417080872022-11-27 20:06:088 days 32 mins ago0x09cc15dda77789d42c0133c909e88fb6e3af793a IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0 ETH0.00003523
0xff4316bca93a527a3e59727fbd20bcc1682c8c411ef62a28f8702cf4bd669bcfDeposit417066322022-11-27 19:57:038 days 41 mins ago0x75428cf08e78d92bd12ea8fce8489212515f0d56 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.95182 ETH0.0000293
0x70d0992dabc2e7dcc4f7cbe308e464513b048f79d58e4181257fb7aff7a39190Deposit417049532022-11-27 19:46:568 days 51 mins ago0xcada959d150b74e835c738ae724dc4ad094f0479 IN  0xbcb55bdb669e756e982169c19c20c987c26f3c2d1.01 ETH0.00002897
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x38651a96df822c8c703ac75f747674c332030bab40707b12a17d4cf81f414ee0419688122022-11-28 20:04:367 days 33 mins ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0xf46ce0c13577232d5f29d9bd78a9cab2787553460 ETH
0x38651a96df822c8c703ac75f747674c332030bab40707b12a17d4cf81f414ee0419688122022-11-28 20:04:367 days 33 mins ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0x38651a96df822c8c703ac75f747674c332030bab40707b12a17d4cf81f414ee0419688122022-11-28 20:04:367 days 33 mins ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10.00001 ETH
0x5421b6e8f6d1e6d534a6c95e9b4b04183473226f5766a6ce9097e43f44eeea1b419679572022-11-28 20:00:147 days 38 mins ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0xf46ce0c13577232d5f29d9bd78a9cab2787553460 ETH
0x5421b6e8f6d1e6d534a6c95e9b4b04183473226f5766a6ce9097e43f44eeea1b419679572022-11-28 20:00:147 days 38 mins ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0x5421b6e8f6d1e6d534a6c95e9b4b04183473226f5766a6ce9097e43f44eeea1b419679572022-11-28 20:00:147 days 38 mins ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10.015019090002396549 ETH
0x24c5e1cb9bf091dc462541d652b2d7ea8e2e487e846ec3ac3bc5776e77607c66419562772022-11-28 19:02:117 days 1 hr ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0xf46ce0c13577232d5f29d9bd78a9cab2787553460 ETH
0x24c5e1cb9bf091dc462541d652b2d7ea8e2e487e846ec3ac3bc5776e77607c66419562772022-11-28 19:02:117 days 1 hr ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0x24c5e1cb9bf091dc462541d652b2d7ea8e2e487e846ec3ac3bc5776e77607c66419562772022-11-28 19:02:117 days 1 hr ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10.00001 ETH
0xc06f0acf260fe5b9cea7335d352da95fe7f67ef23a6c6aa19af338b495ff78ac419499962022-11-28 18:31:007 days 2 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0xf46ce0c13577232d5f29d9bd78a9cab2787553460 ETH
0xc06f0acf260fe5b9cea7335d352da95fe7f67ef23a6c6aa19af338b495ff78ac419499962022-11-28 18:31:007 days 2 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0xc06f0acf260fe5b9cea7335d352da95fe7f67ef23a6c6aa19af338b495ff78ac419499962022-11-28 18:31:007 days 2 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10.0001 ETH
0x7f8b0a84fa9cc59608e583a4d37ef0c3a20c1d3f5674166d3f1a6f157dc51197419319412022-11-28 17:04:497 days 3 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0xf46ce0c13577232d5f29d9bd78a9cab2787553460 ETH
0x7f8b0a84fa9cc59608e583a4d37ef0c3a20c1d3f5674166d3f1a6f157dc51197419319412022-11-28 17:04:497 days 3 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0x7f8b0a84fa9cc59608e583a4d37ef0c3a20c1d3f5674166d3f1a6f157dc51197419319412022-11-28 17:04:497 days 3 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10.001 ETH
0x1c5cea1d3e96b350258ec0a01c49384eb223384ae414a282c450495f253a4b74418948612022-11-28 13:59:527 days 6 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0xf46ce0c13577232d5f29d9bd78a9cab2787553460 ETH
0x1c5cea1d3e96b350258ec0a01c49384eb223384ae414a282c450495f253a4b74418948612022-11-28 13:59:527 days 6 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0x1c5cea1d3e96b350258ec0a01c49384eb223384ae414a282c450495f253a4b74418948612022-11-28 13:59:527 days 6 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab12.7 ETH
0xf045f403c34555a980f8cc0241866aa28e1ebec1fdc4596ec1e554c09143ccac418649922022-11-28 11:35:107 days 9 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d0xcc93ba13a7d488d2514e0012bb82cb9f059382950.000500162013057908 ETH
0xf045f403c34555a980f8cc0241866aa28e1ebec1fdc4596ec1e554c09143ccac418649922022-11-28 11:35:107 days 9 hrs ago 0x82af49447d8a07e3bd95bd0d56f35241523fbab1 0xbcb55bdb669e756e982169c19c20c987c26f3c2d0.000500162013057908 ETH
0xf045f403c34555a980f8cc0241866aa28e1ebec1fdc4596ec1e554c09143ccac418649922022-11-28 11:35:107 days 9 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0xf045f403c34555a980f8cc0241866aa28e1ebec1fdc4596ec1e554c09143ccac418649922022-11-28 11:35:107 days 9 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d 0xf46ce0c13577232d5f29d9bd78a9cab2787553460 ETH
0xf045f403c34555a980f8cc0241866aa28e1ebec1fdc4596ec1e554c09143ccac418649922022-11-28 11:35:107 days 9 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d Jones DAO: jETH Token0 ETH
0xf045f403c34555a980f8cc0241866aa28e1ebec1fdc4596ec1e554c09143ccac418649922022-11-28 11:35:107 days 9 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d Jones DAO: jETH Token0 ETH
0x0d6f58cdc503548cfe5e0b6c73600134249279bd8f15bcab874dc9714fe6c2fc418501372022-11-28 10:16:507 days 10 hrs ago 0xbcb55bdb669e756e982169c19c20c987c26f3c2d0x6299dbe5be8ed5d5df9ff5a21b485c7da0cf34760.030244609743876949 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JonesWETHVaultV3Adapter

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 7 : JonesWETHVaultV3Adapter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IVault} from "./IVault.sol";
import {IwETH} from "../interfaces/IwETH.sol";

/**
 * @notice Contract that allows users to deposit and redeem native ETH on the Jones wETH vault
 */
contract JonesWETHVaultV3Adapter is Ownable, ReentrancyGuard {
    IVault public vault;
    IwETH public wETH;
    IERC20 public share;

    /**
     * @param _vault The vault address
     * @param _wETH The wETH address
     * @param _governor The address of the owner of the adapter
     */
    constructor(
        address _vault,
        address _wETH,
        address _governor
    ) {
        if (_vault == address(0)) {
            revert INVALID_ADDRESS();
        }

        if (_wETH == address(0)) {
            revert INVALID_ADDRESS();
        }

        if (_governor == address(0)) {
            revert INVALID_ADDRESS();
        }

        vault = IVault(_vault);
        wETH = IwETH(_wETH);
        share = IERC20(vault.share());

        // Set the new owner
        _transferOwnership(_governor);
    }

    /**
     * @notice Wraps ETH and deposits into the Jones wETH vault
     * @dev Will revert if the contract is not whitelisted on the vault
     * @param _receiver The address that will receive the shares
     */
    function deposit(address _receiver) public payable virtual nonReentrant {
        _senderIsEligible();

        if (msg.value == 0) {
            revert INVALID_ETH_AMOUNT();
        }

        // Wrap the incoming ETH
        wETH.deposit{value: msg.value}();

        // Deposit and transfer shares to `msg.sender`
        wETH.approve(address(vault), msg.value);
        vault.deposit(msg.value, _receiver);
    }

    /**
     * @notice Redeems wETH from the Jones wETH vault and unwraps it
     * @dev Will revert fail if the contract is not whitelisted on the vault
     * @param _shares The amount of shares to burn
     * @param _receiver The address that will receive the ETH
     */
    function redeem(uint256 _shares, address _receiver)
        public
        payable
        virtual
        nonReentrant
    {
        if (_shares == 0) {
            revert INVALID_SHARES_AMOUNT();
        }

        // Transfer the `_shares` to the adapter
        share.transferFrom(msg.sender, address(this), _shares);

        // Redeem the `_shares` for `assets`
        share.approve(address(vault), _shares);
        uint256 assets = vault.redeem(_shares, address(this), address(this));

        // Unwrap the wETH
        wETH.withdraw(assets);

        // Transfer the unwrapped ETH to `_receiver`
        payable(_receiver).transfer(assets);
    }

    /**
     * @notice Updates the current vault to a new one
     * @dev Will revert if it's not called by `owner`
     * @param _newVault the address of the new vault
     */
    function updateVault(address _newVault) external onlyOwner {
        if (_newVault == address(0)) {
            revert INVALID_ADDRESS();
        }

        vault = IVault(_newVault);
        share = IERC20(vault.share());
    }

    /**
     * @notice Check if the message sender is a smart contract, if it is it will check if the
     * address is whitelisted on the vault contract
     * @dev This is needed because the adapter will be whitelisted so it can be used by other
     * contracts to bypass the vault whitelist
     */
    function _senderIsEligible() internal view {
        if (msg.sender != tx.origin) {
            if (!vault.whitelistedContract(msg.sender)) {
                revert UNAUTHORIZED();
            }
        }
    }

    receive() external payable {}

    /**
     * Used just in case someone sends ETH by mistake to the adapter.
     * @param _to user to send the funds
     * @param _amount amount to send
     */
    function emergencyReturn(address _to, uint256 _amount) external onlyOwner {
        payable(_to).transfer(_amount);
    }

    error INVALID_ETH_AMOUNT();
    error INVALID_SHARES_AMOUNT();
    error UNAUTHORIZED();
    error INVALID_ADDRESS();
}

File 2 of 7 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 3 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.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 5 of 7 : IVault.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.10;

interface IVault {
    // ============================= View functions ================================

    /**
     * The amount of `shares` that the Vault would exchange for the amount of `assets` provided, in an ideal scenario where all the conditions are met.
     *
     * Does not show any variations depending on the caller.
     * Does not reflect slippage or other on-chain conditions, when performing the actual exchange.
     * Does not revert unless due to integer overflow caused by an unreasonably large input.
     * This calculation does not reflect the “per-user” price-per-share, and instead reflects the “average-user’s” price-per-share, meaning what the average user can expect to see when exchanging to and from.
     *
     * @param assets Amount of assets to convert.
     * @return shares Amount of shares calculated for the amount of given assets, rounded down towards 0. Does not include any fees that are charged against assets in the Vault.
     */
    function convertToShares(uint256 assets)
        external
        view
        returns (uint256 shares);

    /**
     * The amount of `assets` that the Vault would exchange for the amount of `shares` provided, in an ideal scenario where all the conditions are met.
     *
     * Does not show any variations depending on the caller.
     * Does not reflect slippage or other on-chain conditions, when performing the actual exchange.
     * Does not revert unless due to integer overflow caused by an unreasonably large input.
     * This calculation does not reflect the “per-user” price-per-share, and instead reflects the “average-user’s” price-per-share, meaning what the average user can expect to see when exchanging to and from.
     *
     * @return assets Amount of assets calculated for the given amount of shares, rounded down towards 0. Does not include fees that are charged against assets in the Vault.
     */
    function convertToAssets(uint256 shares)
        external
        view
        returns (uint256 assets);

    /**
     * Maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call.
     * Returns the maximum amount of assets deposit would allow to be deposited for receiver and not cause a revert, which should be higher than the actual maximum that would be accepted (it should underestimate if necessary). This assumes that the user has infinite assets, i.e. does not rely on balanceOf of asset.
     *
     * Does not revert.
     * This is akin to `vaultCap` in legacy vaults.
     *
     * The `receiver` parameter is added for ERC-4626 parity and is not relevant to our use case
     * since we are not going to have user specific limits for deposits. Either deposits are limited
     * to everyone or no one.
     *
     * @return maxAssets Max assets that can be deposited for receiver. Returns 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. Returns 0 if deposits are entirely disabled (even temporarily).
     */
    function maxDeposit(address receiver)
        external
        view
        returns (uint256 maxAssets);

    /**
     * Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions.
     *
     * Returns as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit will return the same or more shares as previewDeposit if called in the same transaction.
     * Does not account for deposit limits like those returned from maxDeposit and always acts as though the deposit would be accepted, regardless if the user has enough tokens approved, etc.
     * Does not revert due to vault specific user/global limits. May revert due to other conditions that would also cause deposit to revert.
     *
     * Any unfavorable discrepancy between convertToShares and previewDeposit will be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.
     *
     * @return shares exact amount of shares that would be minted in a deposit call. That includes deposit fees. Integrators should be aware of the existence of deposit fees.
     */
    function previewDeposit(uint256 assets)
        external
        view
        returns (uint256 shares);

    /**
     * @return The current vault State
     */
    function state() external view returns (State);

    /**
     * The address of the underlying token used for the Vault for accounting, depositing, and withdrawing.
     */
    function asset() external view returns (address);

    /**
     * The address of the underlying shares token used used to represent tokenized vault.
     */
    function share() external view returns (address);

    /**
     * Total amount of the underlying asset that is managed by this vault.
     *
     * This includes any compounding that occurs from yield.
     * It must be inclusive of any fees that are charged against assets in the Vault.
     * Must not revert.
     *
     * @return totalManagedAssets amount of underlying asset managed by vault.
     */
    function totalAssets() external view returns (uint256 totalManagedAssets);

    /**
     * Maximum amount of shares that can be minted from the Vault for the `receiver`, through a `mint` call.
     *
     * Returns `2 ** 256 - 1` if there is no limit on the maximum amount of shares that may be minted.
     */
    function maxMint(address receiver)
        external
        view
        returns (uint256 maxShares);

    /**
     * Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions.
     * MUST NOT revert due to vault specific user/global limits. MAY revert due to other conditions that would also cause mint to revert.
     * note: Any unfavorable discrepancy between `convertToAssets` and `previewMint` should be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.
     *
     * Does not account for mint limits like those returned from maxMint and always acts as though the mint would be accepted, regardless if the user has enough tokens approved, etc.
     */
    function previewMint(uint256 shares) external view returns (uint256 assets);

    /**
     * Maximum amount of the underlying asset that can be withdrawn from the `owner` balance in the Vault, through a `withdraw` call.
     *
     * Factors in both global and user-specific limits, like if withdrawals are entirely disabled (even temporarily) it must return 0.
     * Does not revert.
     *
     * @return maxAssets The maximum amount of assets that could be transferred from `owner` through `withdraw` and not cause a revert, which must not be higher than the actual maximum that would be accepted (it should underestimate if necessary).
     */
    function maxWithdraw(address owner)
        external
        view
        returns (uint256 maxAssets);

    /**
     * Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions.
     *
     * Does not revert due to vault specific user/global limits. May revert due to other conditions that would also cause withdraw to revert.
     * Any unfavorable discrepancy between convertToShares and previewWithdraw should be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.
     *
     * @return shares Shares available to withdraw for specified assets. This includes of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.
     */
    function previewWithdraw(uint256 assets)
        external
        view
        returns (uint256 shares);

    /**
     * Maximum amount of Vault shares that can be redeemed from the `owner` balance in the Vault, through a `redeem` call.
     *
     * @return maxShares Max shares that can be redeemed. Factors in both global and user-specific limits, like if redemption is entirely disabled (even temporarily) it will return 0.
     */
    function maxRedeem(address owner) external view returns (uint256 maxShares);

    /**
     * Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions.
     * Does not account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc.
     *
     * Does not revert due to vault specific user/global limits. May revert due to other conditions that would also cause redeem to revert.
     *
     * @return assets Amount of assets redeemable for given shares. Includes of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.
     */
    function previewRedeem(uint256 shares)
        external
        view
        returns (uint256 assets);

    // ============================= User functions ================================

    /**
     * @dev Mints `shares` Vault shares to `receiver` by depositing `amount` of underlying tokens. This should only be called outside the management window.
     *
     * Reverts if all of assets cannot be deposited (ex due to deposit limit, slippage, approvals, etc).
     *
     * Emits a {Deposit} event
     */
    function deposit(uint256 assets, address receiver)
        external
        returns (uint256 shares);

    /**
     * Mints exactly `shares` Vault shares to `receiver` by depositing `amount` of underlying tokens.
     *
     * Reverts if all of shares cannot be minted (ex. due to deposit limit being reached, slippage, etc).
     *
     * Emits a {Deposit} event
     */
    function mint(uint256 shares, address receiver)
        external
        returns (uint256 assets);

    /**
     * Burns `shares` from `owner` and sends exactly `assets` of underlying tokens to `receiver`. Only available outside of management window.
     *
     * Reverts if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc).
     * Any pre-requesting methods before withdrawal should be performed separately.
     *
     * Emits a {Withdraw} event
     */
    function withdraw(
        uint256 assets,
        address receiver,
        address owner
    ) external returns (uint256 shares);

    /**
     * Burns exactly `shares` from `owner` and sends `assets` of underlying tokens to `receiver`. Only available outside of management window.
     *
     * Reverts if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc).
     * Any pre-requesting methods before withdrawal should be performed separately.
     *
     * Emits a {Withdraw} event
     */
    function redeem(
        uint256 shares,
        address receiver,
        address owner
    ) external returns (uint256 assets);

    // ============================= Strategy functions ================================

    /**
     * Sends the required amount of Asset from this vault to the calling strategy.
     * @dev can only be called by whitelisted strategies (KEEPER role)
     * @dev reverts if management window is closed.
     * @param assets the amount of tokens to pull
     */
    function pull(uint256 assets) external;

    /**
     * Deposits funds from Strategy (both profits and principal amounts).
     * @dev can only be called by whitelisted strategies (KEEPER role)
     * @dev reverts if management window is closed.
     * @param assets the amount of Assets being deposited from the strategy.
     */
    function depositStrategyFunds(uint256 assets) external;

    // ============================= Admin functions ================================

    /**
     * Sets the max deposit `amount` for vault. Akin to setting vault cap in v2 vaults.
     * Since we will not be limiting deposits per user there is no need to add `receiver` input
     * in the argument.
     */
    function setVaultCap(uint256 amount) external;

    /**
     * Adds a strategy to the whitelist.
     * @dev can only be called by governor (GOVERNOR role)
     * @param _address of the strategy to whitelist
     */
    function whitelistStrategy(address _address) external;

    /**
     * Removes a strategy from the whitelist.
     * @dev can only be called by governor (GOVERNOR role)
     * @param _address of the strategy to remove from whitelist
     */
    function removeStrategyFromWhitelist(address _address) external;

    /**
     * @notice Adds a contract to the whitelist.
     * @dev By default only EOA cann interact with the vault.
     * @dev Whitelisted contracts will be able to interact with the vault too.
     * @param contractAddress The address of the contract to whitelist.
     */
    function addContractAddressToWhitelist(address contractAddress) external;

    /**
     * @notice Used to check wheter a contract address is whitelisted to use the vault
     * @param _contractAddress The address of the contract to check
     * @return `true` if the contract is whitelisted, `false` otherwise
     */
    function whitelistedContract(address _contractAddress)
        external
        view
        returns (bool);

    /**
     * @notice Removes a contract from the whitelist.
     * @dev Removed contracts wont be able to interact with the vault.
     * @param contractAddress The address of the contract to whitelist.
     */
    function removeContractAddressFromWhitelist(address contractAddress)
        external;

    /**
     * Migrate vault to new vault contract.
     * @dev acts as emergency withdrawal if needed.
     * @dev can only be called by governor (GOVERNOR role)
     * @param _to New vault contract address.
     * @param _tokens Addresses of tokens to be migrated.
     *
     */
    function migrate(address _to, address[] memory _tokens) external;

    /**
     * Deposits and withdrawals close, assets are under vault control.
     * @dev can only be called by governor (GOVERNOR role)
     */
    function openManagementWindow() external;

    /**
     * Open vault for deposits and claims.
     * @dev can only be called by governor (GOVERNOR role)
     */
    function closeManagementWindow() external;

    /**
     * Open vault for deposits and claims, sets the snapshot of assets balance manually
     * @dev can only be called by governor (GOVERNOR role)
     * @dev can only be called on `State.INITIAL`
     * @param _snapshotAssetBalance Overrides the value of the snapshotted asset balance
     * @param _snapshotShareSupply Overrides the value of the snapshotted share supply
     */
    function initialRun(
        uint256 _snapshotAssetBalance,
        uint256 _snapshotShareSupply
    ) external;

    /**
     * Enable/diable charging performance & management fees
     * @dev can only be called by GOVERNOR role
     * @param _status `true` if the vault should charge fees, `false` otherwise
     */
    function setChargeFees(bool _status) external;

    /**
     * Updated the fee distributor address
     * @dev can only be called by GOVERNOR role
     * @param _feeDistributor The address of the new fee distributor
     */
    function setFeeDistributor(address _feeDistributor) external;

    // ============================= Enums =================================

    /**
     * Enum to represent the current state of the vault
     * INITIAL = Right after deployment, can move to `UNMANAGED` by calling `initialRun`
     * UNMANAGED = Users are able to interact with the vault, can move to `MANAGED` by calling `openManagementWindow`
     * MANAGED = Strategies will be able to borrow & repay, can move to `UNMANAGED` by calling `closeManagementWindow`
     */
    enum State {
        INITIAL,
        UNMANAGED,
        MANAGED
    }

    // ============================= Events ================================

    /**
     * `caller` has exchanged `assets` for `shares`, and transferred those `shares` to `owner`.
     * Emitted when tokens are deposited into the Vault via the `mint` and `deposit` methods.
     */
    event Deposit(
        address indexed caller,
        address indexed owner,
        uint256 assets,
        uint256 shares
    );

    /**
     * `caller` has exchanged `shares`, owned by `owner`, for `assets`, and transferred those `assets` to `receiver`.
     * Will be emitted when shares are withdrawn from the Vault in `ERC4626.redeem` or `ERC4626.withdraw` methods.
     */
    event Withdraw(
        address indexed caller,
        address indexed receiver,
        address indexed owner,
        uint256 assets,
        uint256 shares
    );

    /**
     * emitted when vault balance snapshot is taken
     * @param _timestamp snapshot timestamp (indexed)
     * @param _vaultBalance vault balance value
     * @param _jonesAssetSupply jDPX total supply value
     */
    event Snapshot(
        uint256 indexed _timestamp,
        uint256 _vaultBalance,
        uint256 _jonesAssetSupply
    );

    /**
     * emitted when asset management window is opened
     * @param _timestamp snapshot timestamp (indexed)
     * @param _assetBalance new vault balance value
     * @param _shareSupply share token total supply at this time
     */
    event EpochStarted(
        uint256 indexed _timestamp,
        uint256 _assetBalance,
        uint256 _shareSupply
    );

    /** emitted when claim and deposit windows are open
     * @param _timestamp snapshot timestamp (indexed)
     * @param _assetBalance new vault balance value
     * @param _shareSupply share token total supply at this time
     */
    event EpochEnded(
        uint256 indexed _timestamp,
        uint256 _assetBalance,
        uint256 _shareSupply
    );

    // ============================= Errors ================================
    error MSG_SENDER_NOT_WHITELISTED_USER();
    error DEPOSIT_ASSET_AMOUNT_EXCEEDS_MAX_DEPOSIT();
    error MINT_SHARE_AMOUNT_EXCEEDS_MAX_MINT();
    error ZERO_SHARES_AVAILABLE_WHEN_DEPOSITING();
    error INVALID_STATE(State _expected, State _actual);
    error INVALID_ASSETS_AMOUNT();
    error INVALID_SHARES_AMOUNT();
    error CONTRACT_ADDRESS_MAKING_PROHIBITED_FUNCTION_CALL();
    error INVALID_ADDRESS();
    error INVALID_SNAPSHOT_VALUE();
}

File 6 of 7 : IwETH.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.10;

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

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

    function withdraw(uint256 amount) external;
}

File 7 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_wETH","type":"address"},{"internalType":"address","name":"_governor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"INVALID_ADDRESS","type":"error"},{"inputs":[],"name":"INVALID_ETH_AMOUNT","type":"error"},{"inputs":[],"name":"INVALID_SHARES_AMOUNT","type":"error"},{"inputs":[],"name":"UNAUTHORIZED","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyReturn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"redeem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"share","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newVault","type":"address"}],"name":"updateVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wETH","outputs":[{"internalType":"contract IwETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040516200197c3803806200197c83398181016040528101906200003791906200043c565b620000576200004b6200030660201b60201c565b6200030e60201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620000c6576040517f5963709b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200012e576040517f5963709b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000196576040517f5963709b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8d5fd656040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac919062000498565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002fd816200030e60201b60201c565b505050620004ca565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040482620003d7565b9050919050565b6200041681620003f7565b81146200042257600080fd5b50565b60008151905062000436816200040b565b92915050565b600080600060608486031215620004585762000457620003d2565b5b6000620004688682870162000425565b93505060206200047b8682870162000425565b92505060406200048e8682870162000425565b9150509250925092565b600060208284031215620004b157620004b0620003d2565b5b6000620004c18482850162000425565b91505092915050565b6114a280620004da6000396000f3fe6080604052600436106100955760003560e01c8063e7563f3f11610059578063e7563f3f14610153578063f24286211461017c578063f2fde38b146101a7578063f340fa01146101d0578063fbfa77cf146101ec5761009c565b806369201540146100a1578063715018a6146100ca5780637bde82f2146100e15780638da5cb5b146100fd578063a8d5fd65146101285761009c565b3661009c57005b600080fd5b3480156100ad57600080fd5b506100c860048036038101906100c39190610f55565b610217565b005b3480156100d657600080fd5b506100df6102de565b005b6100fb60048036038101906100f69190610f95565b610366565b005b34801561010957600080fd5b506101126106db565b60405161011f9190610fe4565b60405180910390f35b34801561013457600080fd5b5061013d610704565b60405161014a919061105e565b60405180910390f35b34801561015f57600080fd5b5061017a60048036038101906101759190611079565b61072a565b005b34801561018857600080fd5b50610191610922565b60405161019e91906110c7565b60405180910390f35b3480156101b357600080fd5b506101ce60048036038101906101c99190611079565b610948565b005b6101ea60048036038101906101e59190611079565b610a40565b005b3480156101f857600080fd5b50610201610cc2565b60405161020e9190611103565b60405180910390f35b61021f610ce8565b73ffffffffffffffffffffffffffffffffffffffff1661023d6106db565b73ffffffffffffffffffffffffffffffffffffffff1614610293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028a9061117b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156102d9573d6000803e3d6000fd5b505050565b6102e6610ce8565b73ffffffffffffffffffffffffffffffffffffffff166103046106db565b73ffffffffffffffffffffffffffffffffffffffff161461035a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103519061117b565b60405180910390fd5b6103646000610cf0565b565b600260015414156103ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a3906111e7565b60405180910390fd5b600260018190555060008214156103ef576040517f48bb68ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161044e93929190611216565b6020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190611285565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016105119291906112b2565b6020604051808303816000875af1158015610530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105549190611285565b506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba0876528430306040518463ffffffff1660e01b81526004016105b6939291906112db565b6020604051808303816000875af11580156105d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f99190611327565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016106569190611354565b600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156106ce573d6000803e3d6000fd5b5050600180819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610732610ce8565b73ffffffffffffffffffffffffffffffffffffffff166107506106db565b73ffffffffffffffffffffffffffffffffffffffff16146107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d9061117b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561080d576040517f5963709b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8d5fd656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190611384565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610950610ce8565b73ffffffffffffffffffffffffffffffffffffffff1661096e6106db565b73ffffffffffffffffffffffffffffffffffffffff16146109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb9061117b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90611423565b60405180910390fd5b610a3d81610cf0565b50565b60026001541415610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d906111e7565b60405180910390fd5b6002600181905550610a96610db4565b6000341415610ad1576040517fede1d8dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b3b57600080fd5b505af1158015610b4f573d6000803e3d6000fd5b5050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346040518363ffffffff1660e01b8152600401610bd39291906112b2565b6020604051808303816000875af1158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c169190611285565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e553f6534836040518363ffffffff1660e01b8152600401610c74929190611443565b6020604051808303816000875af1158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb79190611327565b506001808190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eba57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328836fd7336040518263ffffffff1660e01b8152600401610e429190610fe4565b602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611285565b610eb9576040517f075fd2b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610eec82610ec1565b9050919050565b610efc81610ee1565b8114610f0757600080fd5b50565b600081359050610f1981610ef3565b92915050565b6000819050919050565b610f3281610f1f565b8114610f3d57600080fd5b50565b600081359050610f4f81610f29565b92915050565b60008060408385031215610f6c57610f6b610ebc565b5b6000610f7a85828601610f0a565b9250506020610f8b85828601610f40565b9150509250929050565b60008060408385031215610fac57610fab610ebc565b5b6000610fba85828601610f40565b9250506020610fcb85828601610f0a565b9150509250929050565b610fde81610ee1565b82525050565b6000602082019050610ff96000830184610fd5565b92915050565b6000819050919050565b600061102461101f61101a84610ec1565b610fff565b610ec1565b9050919050565b600061103682611009565b9050919050565b60006110488261102b565b9050919050565b6110588161103d565b82525050565b6000602082019050611073600083018461104f565b92915050565b60006020828403121561108f5761108e610ebc565b5b600061109d84828501610f0a565b91505092915050565b60006110b18261102b565b9050919050565b6110c1816110a6565b82525050565b60006020820190506110dc60008301846110b8565b92915050565b60006110ed8261102b565b9050919050565b6110fd816110e2565b82525050565b600060208201905061111860008301846110f4565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061116560208361111e565b91506111708261112f565b602082019050919050565b6000602082019050818103600083015261119481611158565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006111d1601f8361111e565b91506111dc8261119b565b602082019050919050565b60006020820190508181036000830152611200816111c4565b9050919050565b61121081610f1f565b82525050565b600060608201905061122b6000830186610fd5565b6112386020830185610fd5565b6112456040830184611207565b949350505050565b60008115159050919050565b6112628161124d565b811461126d57600080fd5b50565b60008151905061127f81611259565b92915050565b60006020828403121561129b5761129a610ebc565b5b60006112a984828501611270565b91505092915050565b60006040820190506112c76000830185610fd5565b6112d46020830184611207565b9392505050565b60006060820190506112f06000830186611207565b6112fd6020830185610fd5565b61130a6040830184610fd5565b949350505050565b60008151905061132181610f29565b92915050565b60006020828403121561133d5761133c610ebc565b5b600061134b84828501611312565b91505092915050565b60006020820190506113696000830184611207565b92915050565b60008151905061137e81610ef3565b92915050565b60006020828403121561139a57611399610ebc565b5b60006113a88482850161136f565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061140d60268361111e565b9150611418826113b1565b604082019050919050565b6000602082019050818103600083015261143c81611400565b9050919050565b60006040820190506114586000830185611207565b6114656020830184610fd5565b939250505056fea26469706673582212204ff661f3797068e8e65d78562a56474a619bb3ed36fb9cd56e2e4dbc24a5c8d664736f6c634300080a0033000000000000000000000000f46ce0c13577232d5f29d9bd78a9cab27875534600000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000dd0556ddcfe7cdab3540e7f09cb366f498d90774

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

000000000000000000000000f46ce0c13577232d5f29d9bd78a9cab27875534600000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000dd0556ddcfe7cdab3540e7f09cb366f498d90774

-----Decoded View---------------
Arg [0] : _vault (address): 0xf46ce0c13577232d5f29d9bd78a9cab278755346
Arg [1] : _wETH (address): 0x82af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [2] : _governor (address): 0xdd0556ddcfe7cdab3540e7f09cb366f498d90774

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f46ce0c13577232d5f29d9bd78a9cab278755346
Arg [1] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [2] : 000000000000000000000000dd0556ddcfe7cdab3540e7f09cb366f498d90774


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