More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,253 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem | 328855387 | 35 hrs ago | IN | 0 ETH | 0.00000158 | ||||
Redeem | 326346417 | 8 days ago | IN | 0 ETH | 0.00000253 | ||||
Redeem | 321218169 | 23 days ago | IN | 0 ETH | 0.00000158 | ||||
Redeem | 318672902 | 31 days ago | IN | 0 ETH | 0.00000159 | ||||
Redeem | 317146593 | 35 days ago | IN | 0 ETH | 0.00000159 | ||||
Redeem | 305298720 | 69 days ago | IN | 0 ETH | 0.00000203 | ||||
Redeem | 301459788 | 81 days ago | IN | 0 ETH | 0.00000168 | ||||
Redeem | 300500686 | 83 days ago | IN | 0 ETH | 0.00000174 | ||||
Redeem | 299374260 | 87 days ago | IN | 0 ETH | 0.00000179 | ||||
Redeem | 296626131 | 95 days ago | IN | 0 ETH | 0.000004 | ||||
Redeem | 296597547 | 95 days ago | IN | 0 ETH | 0.00000341 | ||||
Redeem | 296559641 | 95 days ago | IN | 0 ETH | 0.00000591 | ||||
Redeem | 295596253 | 98 days ago | IN | 0 ETH | 0.00000178 | ||||
Redeem | 294883938 | 100 days ago | IN | 0 ETH | 0.00000172 | ||||
Redeem | 292820136 | 106 days ago | IN | 0 ETH | 0.00000189 | ||||
Redeem | 292288783 | 107 days ago | IN | 0 ETH | 0.00000226 | ||||
Redeem | 292005880 | 108 days ago | IN | 0 ETH | 0.00000227 | ||||
Redeem | 290138955 | 114 days ago | IN | 0 ETH | 0.00000216 | ||||
Redeem | 289975756 | 114 days ago | IN | 0 ETH | 0.00000188 | ||||
Redeem | 289436406 | 116 days ago | IN | 0 ETH | 0.00000188 | ||||
Redeem | 288146520 | 119 days ago | IN | 0 ETH | 0.00000692 | ||||
Redeem | 287453440 | 121 days ago | IN | 0 ETH | 0.00000671 | ||||
Redeem | 283192092 | 134 days ago | IN | 0 ETH | 0.00001781 | ||||
Redeem | 282990915 | 134 days ago | IN | 0 ETH | 0.00000503 | ||||
Redeem | 282379775 | 136 days ago | IN | 0 ETH | 0.000004 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
328855387 | 35 hrs ago | 0.00010003 ETH | ||||
328855387 | 35 hrs ago | 0.00010003 ETH | ||||
326346417 | 8 days ago | 0.00200088 ETH | ||||
326346417 | 8 days ago | 0.00200088 ETH | ||||
321218169 | 23 days ago | 0.78460137 ETH | ||||
321218169 | 23 days ago | 0.78460137 ETH | ||||
318672902 | 31 days ago | 0.00009988 ETH | ||||
318672902 | 31 days ago | 0.00009988 ETH | ||||
317146593 | 35 days ago | 0.0009989 ETH | ||||
317146593 | 35 days ago | 0.0009989 ETH | ||||
314272513 | 43 days ago | 0.69958995 ETH | ||||
314272513 | 43 days ago | 0.69958995 ETH | ||||
305298720 | 69 days ago | 0.00099748 ETH | ||||
305298720 | 69 days ago | 0.00099748 ETH | ||||
301459788 | 81 days ago | 0.00099948 ETH | ||||
301459788 | 81 days ago | 0.00099948 ETH | ||||
300500686 | 83 days ago | 0.00104613 ETH | ||||
300500686 | 83 days ago | 0.00104613 ETH | ||||
299374260 | 87 days ago | 0.00033174 ETH | ||||
299374260 | 87 days ago | 0.00033174 ETH | ||||
296626131 | 95 days ago | 0.10204215 ETH | ||||
296626131 | 95 days ago | 0.10204215 ETH | ||||
296597547 | 95 days ago | 0.00099906 ETH | ||||
296597547 | 95 days ago | 0.00099906 ETH | ||||
296559641 | 95 days ago | 0.00089509 ETH |
Loading...
Loading
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)
// 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(); }
// 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; } }
// 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); } }
// 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); }
//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(); }
// 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; }
// 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; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200197c3803806200197c83398181016040528101906200003791906200043c565b620000576200004b6200030660201b60201c565b6200030e60201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620000c6576040517f5963709b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200012e576040517f5963709b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000196576040517f5963709b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8d5fd656040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac919062000498565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002fd816200030e60201b60201c565b505050620004ca565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040482620003d7565b9050919050565b6200041681620003f7565b81146200042257600080fd5b50565b60008151905062000436816200040b565b92915050565b600080600060608486031215620004585762000457620003d2565b5b6000620004688682870162000425565b93505060206200047b8682870162000425565b92505060406200048e8682870162000425565b9150509250925092565b600060208284031215620004b157620004b0620003d2565b5b6000620004c18482850162000425565b91505092915050565b6114a280620004da6000396000f3fe6080604052600436106100955760003560e01c8063e7563f3f11610059578063e7563f3f14610153578063f24286211461017c578063f2fde38b146101a7578063f340fa01146101d0578063fbfa77cf146101ec5761009c565b806369201540146100a1578063715018a6146100ca5780637bde82f2146100e15780638da5cb5b146100fd578063a8d5fd65146101285761009c565b3661009c57005b600080fd5b3480156100ad57600080fd5b506100c860048036038101906100c39190610f55565b610217565b005b3480156100d657600080fd5b506100df6102de565b005b6100fb60048036038101906100f69190610f95565b610366565b005b34801561010957600080fd5b506101126106db565b60405161011f9190610fe4565b60405180910390f35b34801561013457600080fd5b5061013d610704565b60405161014a919061105e565b60405180910390f35b34801561015f57600080fd5b5061017a60048036038101906101759190611079565b61072a565b005b34801561018857600080fd5b50610191610922565b60405161019e91906110c7565b60405180910390f35b3480156101b357600080fd5b506101ce60048036038101906101c99190611079565b610948565b005b6101ea60048036038101906101e59190611079565b610a40565b005b3480156101f857600080fd5b50610201610cc2565b60405161020e9190611103565b60405180910390f35b61021f610ce8565b73ffffffffffffffffffffffffffffffffffffffff1661023d6106db565b73ffffffffffffffffffffffffffffffffffffffff1614610293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028a9061117b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156102d9573d6000803e3d6000fd5b505050565b6102e6610ce8565b73ffffffffffffffffffffffffffffffffffffffff166103046106db565b73ffffffffffffffffffffffffffffffffffffffff161461035a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103519061117b565b60405180910390fd5b6103646000610cf0565b565b600260015414156103ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a3906111e7565b60405180910390fd5b600260018190555060008214156103ef576040517f48bb68ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161044e93929190611216565b6020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190611285565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016105119291906112b2565b6020604051808303816000875af1158015610530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105549190611285565b506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba0876528430306040518463ffffffff1660e01b81526004016105b6939291906112db565b6020604051808303816000875af11580156105d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f99190611327565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016106569190611354565b600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156106ce573d6000803e3d6000fd5b5050600180819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610732610ce8565b73ffffffffffffffffffffffffffffffffffffffff166107506106db565b73ffffffffffffffffffffffffffffffffffffffff16146107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d9061117b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561080d576040517f5963709b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8d5fd656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190611384565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610950610ce8565b73ffffffffffffffffffffffffffffffffffffffff1661096e6106db565b73ffffffffffffffffffffffffffffffffffffffff16146109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb9061117b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90611423565b60405180910390fd5b610a3d81610cf0565b50565b60026001541415610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d906111e7565b60405180910390fd5b6002600181905550610a96610db4565b6000341415610ad1576040517fede1d8dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b3b57600080fd5b505af1158015610b4f573d6000803e3d6000fd5b5050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346040518363ffffffff1660e01b8152600401610bd39291906112b2565b6020604051808303816000875af1158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c169190611285565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e553f6534836040518363ffffffff1660e01b8152600401610c74929190611443565b6020604051808303816000875af1158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb79190611327565b506001808190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eba57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328836fd7336040518263ffffffff1660e01b8152600401610e429190610fe4565b602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611285565b610eb9576040517f075fd2b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610eec82610ec1565b9050919050565b610efc81610ee1565b8114610f0757600080fd5b50565b600081359050610f1981610ef3565b92915050565b6000819050919050565b610f3281610f1f565b8114610f3d57600080fd5b50565b600081359050610f4f81610f29565b92915050565b60008060408385031215610f6c57610f6b610ebc565b5b6000610f7a85828601610f0a565b9250506020610f8b85828601610f40565b9150509250929050565b60008060408385031215610fac57610fab610ebc565b5b6000610fba85828601610f40565b9250506020610fcb85828601610f0a565b9150509250929050565b610fde81610ee1565b82525050565b6000602082019050610ff96000830184610fd5565b92915050565b6000819050919050565b600061102461101f61101a84610ec1565b610fff565b610ec1565b9050919050565b600061103682611009565b9050919050565b60006110488261102b565b9050919050565b6110588161103d565b82525050565b6000602082019050611073600083018461104f565b92915050565b60006020828403121561108f5761108e610ebc565b5b600061109d84828501610f0a565b91505092915050565b60006110b18261102b565b9050919050565b6110c1816110a6565b82525050565b60006020820190506110dc60008301846110b8565b92915050565b60006110ed8261102b565b9050919050565b6110fd816110e2565b82525050565b600060208201905061111860008301846110f4565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061116560208361111e565b91506111708261112f565b602082019050919050565b6000602082019050818103600083015261119481611158565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006111d1601f8361111e565b91506111dc8261119b565b602082019050919050565b60006020820190508181036000830152611200816111c4565b9050919050565b61121081610f1f565b82525050565b600060608201905061122b6000830186610fd5565b6112386020830185610fd5565b6112456040830184611207565b949350505050565b60008115159050919050565b6112628161124d565b811461126d57600080fd5b50565b60008151905061127f81611259565b92915050565b60006020828403121561129b5761129a610ebc565b5b60006112a984828501611270565b91505092915050565b60006040820190506112c76000830185610fd5565b6112d46020830184611207565b9392505050565b60006060820190506112f06000830186611207565b6112fd6020830185610fd5565b61130a6040830184610fd5565b949350505050565b60008151905061132181610f29565b92915050565b60006020828403121561133d5761133c610ebc565b5b600061134b84828501611312565b91505092915050565b60006020820190506113696000830184611207565b92915050565b60008151905061137e81610ef3565b92915050565b60006020828403121561139a57611399610ebc565b5b60006113a88482850161136f565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061140d60268361111e565b9150611418826113b1565b604082019050919050565b6000602082019050818103600083015261143c81611400565b9050919050565b60006040820190506114586000830185611207565b6114656020830184610fd5565b939250505056fea26469706673582212204ff661f3797068e8e65d78562a56474a619bb3ed36fb9cd56e2e4dbc24a5c8d664736f6c634300080a0033000000000000000000000000f46ce0c13577232d5f29d9bd78a9cab27875534600000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000dd0556ddcfe7cdab3540e7f09cb366f498d90774
Deployed Bytecode
0x6080604052600436106100955760003560e01c8063e7563f3f11610059578063e7563f3f14610153578063f24286211461017c578063f2fde38b146101a7578063f340fa01146101d0578063fbfa77cf146101ec5761009c565b806369201540146100a1578063715018a6146100ca5780637bde82f2146100e15780638da5cb5b146100fd578063a8d5fd65146101285761009c565b3661009c57005b600080fd5b3480156100ad57600080fd5b506100c860048036038101906100c39190610f55565b610217565b005b3480156100d657600080fd5b506100df6102de565b005b6100fb60048036038101906100f69190610f95565b610366565b005b34801561010957600080fd5b506101126106db565b60405161011f9190610fe4565b60405180910390f35b34801561013457600080fd5b5061013d610704565b60405161014a919061105e565b60405180910390f35b34801561015f57600080fd5b5061017a60048036038101906101759190611079565b61072a565b005b34801561018857600080fd5b50610191610922565b60405161019e91906110c7565b60405180910390f35b3480156101b357600080fd5b506101ce60048036038101906101c99190611079565b610948565b005b6101ea60048036038101906101e59190611079565b610a40565b005b3480156101f857600080fd5b50610201610cc2565b60405161020e9190611103565b60405180910390f35b61021f610ce8565b73ffffffffffffffffffffffffffffffffffffffff1661023d6106db565b73ffffffffffffffffffffffffffffffffffffffff1614610293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028a9061117b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156102d9573d6000803e3d6000fd5b505050565b6102e6610ce8565b73ffffffffffffffffffffffffffffffffffffffff166103046106db565b73ffffffffffffffffffffffffffffffffffffffff161461035a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103519061117b565b60405180910390fd5b6103646000610cf0565b565b600260015414156103ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a3906111e7565b60405180910390fd5b600260018190555060008214156103ef576040517f48bb68ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161044e93929190611216565b6020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190611285565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016105119291906112b2565b6020604051808303816000875af1158015610530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105549190611285565b506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba0876528430306040518463ffffffff1660e01b81526004016105b6939291906112db565b6020604051808303816000875af11580156105d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f99190611327565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016106569190611354565b600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156106ce573d6000803e3d6000fd5b5050600180819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610732610ce8565b73ffffffffffffffffffffffffffffffffffffffff166107506106db565b73ffffffffffffffffffffffffffffffffffffffff16146107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d9061117b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561080d576040517f5963709b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8d5fd656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190611384565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610950610ce8565b73ffffffffffffffffffffffffffffffffffffffff1661096e6106db565b73ffffffffffffffffffffffffffffffffffffffff16146109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb9061117b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90611423565b60405180910390fd5b610a3d81610cf0565b50565b60026001541415610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d906111e7565b60405180910390fd5b6002600181905550610a96610db4565b6000341415610ad1576040517fede1d8dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b3b57600080fd5b505af1158015610b4f573d6000803e3d6000fd5b5050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346040518363ffffffff1660e01b8152600401610bd39291906112b2565b6020604051808303816000875af1158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c169190611285565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e553f6534836040518363ffffffff1660e01b8152600401610c74929190611443565b6020604051808303816000875af1158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb79190611327565b506001808190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eba57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328836fd7336040518263ffffffff1660e01b8152600401610e429190610fe4565b602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611285565b610eb9576040517f075fd2b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610eec82610ec1565b9050919050565b610efc81610ee1565b8114610f0757600080fd5b50565b600081359050610f1981610ef3565b92915050565b6000819050919050565b610f3281610f1f565b8114610f3d57600080fd5b50565b600081359050610f4f81610f29565b92915050565b60008060408385031215610f6c57610f6b610ebc565b5b6000610f7a85828601610f0a565b9250506020610f8b85828601610f40565b9150509250929050565b60008060408385031215610fac57610fab610ebc565b5b6000610fba85828601610f40565b9250506020610fcb85828601610f0a565b9150509250929050565b610fde81610ee1565b82525050565b6000602082019050610ff96000830184610fd5565b92915050565b6000819050919050565b600061102461101f61101a84610ec1565b610fff565b610ec1565b9050919050565b600061103682611009565b9050919050565b60006110488261102b565b9050919050565b6110588161103d565b82525050565b6000602082019050611073600083018461104f565b92915050565b60006020828403121561108f5761108e610ebc565b5b600061109d84828501610f0a565b91505092915050565b60006110b18261102b565b9050919050565b6110c1816110a6565b82525050565b60006020820190506110dc60008301846110b8565b92915050565b60006110ed8261102b565b9050919050565b6110fd816110e2565b82525050565b600060208201905061111860008301846110f4565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061116560208361111e565b91506111708261112f565b602082019050919050565b6000602082019050818103600083015261119481611158565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006111d1601f8361111e565b91506111dc8261119b565b602082019050919050565b60006020820190508181036000830152611200816111c4565b9050919050565b61121081610f1f565b82525050565b600060608201905061122b6000830186610fd5565b6112386020830185610fd5565b6112456040830184611207565b949350505050565b60008115159050919050565b6112628161124d565b811461126d57600080fd5b50565b60008151905061127f81611259565b92915050565b60006020828403121561129b5761129a610ebc565b5b60006112a984828501611270565b91505092915050565b60006040820190506112c76000830185610fd5565b6112d46020830184611207565b9392505050565b60006060820190506112f06000830186611207565b6112fd6020830185610fd5565b61130a6040830184610fd5565b949350505050565b60008151905061132181610f29565b92915050565b60006020828403121561133d5761133c610ebc565b5b600061134b84828501611312565b91505092915050565b60006020820190506113696000830184611207565b92915050565b60008151905061137e81610ef3565b92915050565b60006020828403121561139a57611399610ebc565b5b60006113a88482850161136f565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061140d60268361111e565b9150611418826113b1565b604082019050919050565b6000602082019050818103600083015261143c81611400565b9050919050565b60006040820190506114586000830185611207565b6114656020830184610fd5565b939250505056fea26469706673582212204ff661f3797068e8e65d78562a56474a619bb3ed36fb9cd56e2e4dbc24a5c8d664736f6c634300080a0033
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.