Contract 0x50744d5e6d138aca596f7d36e659d097be2d561c

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd55f1da81424111f803968e615256858bfeb3c89d8f9868e79deaa5f427dfc16Deposit ETH57622122022-02-10 1:54:02234 days 23 hrs ago0xa7195c71aa20481fa0c093e51323f8a4d3a2f5d2 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.3 ETH0.000374413212 ETH
0xc811523aa86384471ed6563cc88e4ca088cbb87ac3c69ce21df4fa38d5e9724eDeposit ETH56446822022-02-08 14:26:50236 days 10 hrs ago0x08ae366536214cffd71ec744aefba4ebdf7de2ba IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.26 ETH0.000368848771 ETH
0x2717367f329a29e53758aee672ab97b19b3c39fecbc889bbc4a8cba47e76deefDeposit ETH52922302022-01-31 19:58:13244 days 4 hrs ago0x613cc907e053bf8e2618b3e04febdb070ed31c2b IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.05 ETH0.000519560754 ETH
0x71382c617e8da769a8823e00ffe24edb4daea7d281c946e2b7d0eaf139513d5dDeposit ETH52922092022-01-31 19:57:27244 days 4 hrs ago0xa509739a087756e5acd4b990da2a9e114fc98b28 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.3 ETH0.000523934659 ETH
0x3f637dff46971d85792fcc9fdbcc1ddb6ec55cf1a420dcf20ccadf335d093a43Deposit ETH52919682022-01-31 19:47:27244 days 5 hrs ago0xbf0f18033950ef50570db1cfba0ab2eb49d3b889 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c2 ETH0.000525889182 ETH
0x815d345af1ba6e21b4c118d4122c663dd211432ea4162da3b5e82f2de6bd768aDeposit ETH52919432022-01-31 19:47:05244 days 5 hrs ago0x163fb89d3aa2692f0f9d24b385de4cc906989d49 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.05 ETH0.000522472465 ETH
0x891c4fd13c78de771b57bd56f3d513387d3ebc241a216d0faeaf31f01616164eDeposit ETH52919142022-01-31 19:46:03244 days 5 hrs ago0x5a2a1e290034e15d22e905f1d9f0fdfc36774b4c IN  0x50744d5e6d138aca596f7d36e659d097be2d561c1 ETH0.00052393149 ETH
0x100d28fb9950891f713630823b76226f5c59e556716334768ef806566b045601Deposit ETH52919092022-01-31 19:46:03244 days 5 hrs ago0x909ee3e2990ccf8ce2aaa3ccdbc5b61800289fa3 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.2 ETH0.000523930433 ETH
0x4cb0128520af81aa7d88400c2b4f9c3f667eda64e02f92c0f7bd51ec10b34b63Deposit ETH52918772022-01-31 19:44:36244 days 5 hrs ago0xcb27ba694cf38415005b613db0a333cdba00435a IN  0x50744d5e6d138aca596f7d36e659d097be2d561c23 ETH0.000520055098 ETH
0x2adfb1920abd7530f2fb13f695188d78153043064d8bb8d0f2b05512f0d80450Deposit ETH52917722022-01-31 19:40:09244 days 5 hrs ago0xa18ffd4433e41a6a295f7620032b01da935b3a15 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c2.5 ETH0.000515232239 ETH
0xc9b95a8e89014e72cffecb1453f9a82fd16f4cb933d765de39e6cc03da1f8b56Deposit ETH52916982022-01-31 19:37:53244 days 5 hrs ago0x67fbfa7501eac60dbfe86effb8ca14648b9c01d9 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.02 ETH0.000513822576 ETH
0x6e85888ee55e3d22166f5d20660a66c334ebe35c8a8b5ab6850a20a602a2501eDeposit ETH52916302022-01-31 19:35:54244 days 5 hrs ago0xc9f6d94d22eb9444bbdbe79d27d48ad6815d1ae0 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c5 ETH0.000515752137 ETH
0x725b6032fe6ab3591401947c9461987a24a1c422c9cc171a19c352d7fafd0d93Deposit ETH52915452022-01-31 19:32:31244 days 5 hrs ago0x79e4944c76a8baf27720012843bd68a6ecf28c14 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.1895 ETH0.000521982575 ETH
0xb0a8d2d94f2d32d688265a9142cb152893969f71374a0fd8456359c1b4269022Deposit ETH52913622022-01-31 19:27:49244 days 5 hrs ago0x766e5b26e82c3993e46111d2176438248ca1e8b6 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.315 ETH0.000520514567 ETH
0xed6f17b906d2a3e7205d8fe6a012ca353c96ea69cb1f6e16ba22ace634e492aeDeposit ETH52912682022-01-31 19:24:04244 days 5 hrs ago0x38c543db38e23b33a3cb540e4662217427487847 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.2 ETH0.000513810074 ETH
0xab85f508bf70865089b8586f202ae2ceb65704fc1a8294d936d260f726f871feDeposit ETH52912242022-01-31 19:23:03244 days 5 hrs ago0xf725cc2b6ec42fc500f85e82a4ba6289f65354fb IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.66 ETH0.000516695037 ETH
0xa0e142392784d20812b1c3916659d1e6d496b568fe251a586dac0ed266b21803Deposit ETH52911712022-01-31 19:21:36244 days 5 hrs ago0x2222222229b89c7844f19ef503c4dc503be47f84 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c1 ETH0.000517163883 ETH
0x8c431761060006b8639dbe4a28ef1e4c9acc8ea8d6f0a990cf0a7ce5fa8bc91fDeposit ETH52911572022-01-31 19:21:36244 days 5 hrs ago0xa3b4bd8b46742948d9e7e7cf0b06f8529d11b124 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.12 ETH0.000513835079 ETH
0x96a31dbdc424c29ba536f098d48fcc2d16801a5d7754366e0f08f727567200f4Deposit ETH52909762022-01-31 19:15:36244 days 5 hrs ago0x93293f3117fd5398a11a20674a6deae2ac51b099 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c1 ETH0.000515232239 ETH
0xf1cc6f823082ec175bb40e9e40516eab8b7723b5180b9cf568c5be81a3e6aefbDeposit ETH52909112022-01-31 19:12:27244 days 5 hrs ago0xd3122003b777b0dcbdc75a1e28a58dece0b15a79 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c4 ETH0.000515246825 ETH
0x8fc7bc5162198134f484d8ccb916752937d762d7b7e5433b62336517ec9c9f25Deposit ETH52908342022-01-31 19:08:46244 days 5 hrs ago0xaa98c7afabbc0ea3acdc029a9d71b9ac83ff8cef IN  0x50744d5e6d138aca596f7d36e659d097be2d561c5 ETH0.000516684619 ETH
0xc347e3d2ad086d5ae4052ee2991c42cf382eac0e775ca18897edf0b366db51d1Deposit ETH52907532022-01-31 19:07:36244 days 5 hrs ago0xa2f696958a5e023014620687f1d34755c707e5d1 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c3 ETH0.000516695037 ETH
0x670628fdb887154d9f7b0ae0a42e1c75952d4e115e4c365b30a28f9b3312e7b1Deposit ETH52906812022-01-31 19:04:58244 days 5 hrs ago0x07e56281171db109ef9a6ec7729d53365c45bb3c IN  0x50744d5e6d138aca596f7d36e659d097be2d561c1 ETH0.000513819451 ETH
0x29157e55994fab39703e47424530ee91b7bf0fb353c9d291a71e178839e48057Deposit ETH52906432022-01-31 19:03:34244 days 5 hrs ago0x65ed550326b171ae38dfde9b4da40ed5b8342446 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c20 ETH0.000516695037 ETH
0x33465d4870a7426287aef093f8efabdd3321a5d6d25d7981bdefe8d7c726cd4cDeposit ETH52906202022-01-31 19:02:29244 days 5 hrs ago0xbefd31181229b7d34532344e38899e0fea750818 IN  0x50744d5e6d138aca596f7d36e659d097be2d561c0.15 ETH0.000515272872 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x212e8a81aa08ec203f308030100df0c1de2d420eb6e51580cf961adc3e09fb9952925432022-01-31 20:03:38244 days 4 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c 0x3e5c63644e683549055b9be8653de26e0b4cd36e1,101.39072000334 ETH
0x212e8a81aa08ec203f308030100df0c1de2d420eb6e51580cf961adc3e09fb9952925432022-01-31 20:03:38244 days 4 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561cJones DAO: Asset Management Multisig1,101.39072000334 ETH
0x212e8a81aa08ec203f308030100df0c1de2d420eb6e51580cf961adc3e09fb9952925432022-01-31 20:03:38244 days 4 hrs ago Jones DAO: Asset Management Multisig 0x50744d5e6d138aca596f7d36e659d097be2d561c0 ETH
0xff616081f11178ed761924a3cd0f84f576b5a59b0641f18ff5101130c782809b52925092022-01-31 20:02:49244 days 4 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0xff616081f11178ed761924a3cd0f84f576b5a59b0641f18ff5101130c782809b52925092022-01-31 20:02:49244 days 4 hrs ago Jones DAO: Asset Management Multisig 0x50744d5e6d138aca596f7d36e659d097be2d561c0 ETH
0x2717367f329a29e53758aee672ab97b19b3c39fecbc889bbc4a8cba47e76deef52922302022-01-31 19:58:13244 days 4 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x71382c617e8da769a8823e00ffe24edb4daea7d281c946e2b7d0eaf139513d5d52922092022-01-31 19:57:27244 days 4 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x3f637dff46971d85792fcc9fdbcc1ddb6ec55cf1a420dcf20ccadf335d093a4352919682022-01-31 19:47:27244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x815d345af1ba6e21b4c118d4122c663dd211432ea4162da3b5e82f2de6bd768a52919432022-01-31 19:47:05244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x891c4fd13c78de771b57bd56f3d513387d3ebc241a216d0faeaf31f01616164e52919142022-01-31 19:46:03244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x100d28fb9950891f713630823b76226f5c59e556716334768ef806566b04560152919092022-01-31 19:46:03244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x4cb0128520af81aa7d88400c2b4f9c3f667eda64e02f92c0f7bd51ec10b34b6352918772022-01-31 19:44:36244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x2adfb1920abd7530f2fb13f695188d78153043064d8bb8d0f2b05512f0d8045052917722022-01-31 19:40:09244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0xc9b95a8e89014e72cffecb1453f9a82fd16f4cb933d765de39e6cc03da1f8b5652916982022-01-31 19:37:53244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x6e85888ee55e3d22166f5d20660a66c334ebe35c8a8b5ab6850a20a602a2501e52916302022-01-31 19:35:54244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x725b6032fe6ab3591401947c9461987a24a1c422c9cc171a19c352d7fafd0d9352915452022-01-31 19:32:31244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0xb0a8d2d94f2d32d688265a9142cb152893969f71374a0fd8456359c1b426902252913622022-01-31 19:27:49244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0xed6f17b906d2a3e7205d8fe6a012ca353c96ea69cb1f6e16ba22ace634e492ae52912682022-01-31 19:24:04244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0xab85f508bf70865089b8586f202ae2ceb65704fc1a8294d936d260f726f871fe52912242022-01-31 19:23:03244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0xa0e142392784d20812b1c3916659d1e6d496b568fe251a586dac0ed266b2180352911712022-01-31 19:21:36244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x8c431761060006b8639dbe4a28ef1e4c9acc8ea8d6f0a990cf0a7ce5fa8bc91f52911572022-01-31 19:21:36244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x96a31dbdc424c29ba536f098d48fcc2d16801a5d7754366e0f08f727567200f452909762022-01-31 19:15:36244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0xf1cc6f823082ec175bb40e9e40516eab8b7723b5180b9cf568c5be81a3e6aefb52909112022-01-31 19:12:27244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0x8fc7bc5162198134f484d8ccb916752937d762d7b7e5433b62336517ec9c9f2552908342022-01-31 19:08:46244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
0xc347e3d2ad086d5ae4052ee2991c42cf382eac0e775ca18897edf0b366db51d152907532022-01-31 19:07:36244 days 5 hrs ago 0x50744d5e6d138aca596f7d36e659d097be2d561c Jones DAO: jETH Token0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JonesETHVaultV1

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 7 : JonesETHVaultV1.sol
// SPDX-License-Identifier: GPL-3.0
/*                            ******@@@@@@@@@**@*                               
                        ***@@@@@@@@@@@@@@@@@@@@@@**                             
                     *@@@@@@**@@@@@@@@@@@@@@@@@*@@@*                            
                  *@@@@@@@@@@@@@@@@@@@*@@@@@@@@@@@*@**                          
                 *@@@@@@@@@@@@@@@@@@*@@@@@@@@@@@@@@@@@*                         
                **@@@@@@@@@@@@@@@@@*@@@@@@@@@@@@@@@@@@@**                       
                **@@@@@@@@@@@@@@@*@@@@@@@@@@@@@@@@@@@@@@@*                      
                **@@@@@@@@@@@@@@@@*************************                    
                **@@@@@@@@***********************************                   
                 *@@@***********************&@@@@@@@@@@@@@@@****,    ******@@@@*
           *********************@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@************* 
      ***@@@@@@@@@@@@@@@*****@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@****@@*********      
   **@@@@@**********************@@@@*****************#@@@@**********            
  *@@******************************************************                     
 *@************************************                                         
 @*******************************                                               
 *@*************************                                                    
   ********************* 
   
    /$$$$$                                               /$$$$$$$   /$$$$$$   /$$$$$$ 
   |__  $$                                              | $$__  $$ /$$__  $$ /$$__  $$
      | $$  /$$$$$$  /$$$$$$$   /$$$$$$   /$$$$$$$      | $$  \ $$| $$  \ $$| $$  \ $$
      | $$ /$$__  $$| $$__  $$ /$$__  $$ /$$_____/      | $$  | $$| $$$$$$$$| $$  | $$
 /$$  | $$| $$  \ $$| $$  \ $$| $$$$$$$$|  $$$$$$       | $$  | $$| $$__  $$| $$  | $$
| $$  | $$| $$  | $$| $$  | $$| $$_____/ \____  $$      | $$  | $$| $$  | $$| $$  | $$
|  $$$$$$/|  $$$$$$/| $$  | $$|  $$$$$$$ /$$$$$$$/      | $$$$$$$/| $$  | $$|  $$$$$$/
 \______/  \______/ |__/  |__/ \_______/|_______/       |_______/ |__/  |__/ \______/                                      
*/

pragma solidity ^0.8.2;

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {SafeMath} from "@openzeppelin/contracts/utils/math/SafeMath.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import {IJonesAsset} from "../interfaces/IJonesAsset.sol";

/// @title Jones ETH V1 Vault
/// @author Jones DAO

contract JonesETHVaultV1 is Ownable, ReentrancyGuard {
    using SafeMath for uint256;

    // jAsset contract
    IJonesAsset public jonesETHToken;

    // deposit window status
    bool public DEPOSIT_WINDOW_OPEN = false;

    // claim window status
    bool public CLAIM_WINDOW_OPEN = false;

    // vault cap status
    bool public vaultCapSet = false;

    // vault cap value
    uint256 public vaultCapGwei;

    // snapshot of the vault's ETH balance before sending to multisig
    uint256 public snapshotVaultBalance = 1;

    // snapshot of minted jAsset supply before at deposit window close
    uint256 public snapshotJonesETHSupply = 1;

    // emitted on deposit
    event Deposited(
        address indexed _from,
        uint256 indexed _assetAmount,
        uint256 _jonesAssetAmount
    );

    // emitted on claim
    event Claimed(
        address indexed _from,
        uint256 indexed _assetAmount,
        uint256 _jonesAssetAmount
    );

    // emitted when vault balance snapshot is taken
    event SnapshotBalance(uint256 indexed _assetAmount);

    // emitted when the AUM multisig sends funds and yield to the vault
    event DepositFromMultisig(uint256 indexed _assetAmount);

    // emitted when deposited assets are sent to the AUM multisig
    event WithdrawalToMultisig(uint256 indexed _assetAmount);

    /// @param _jonesETH JonesETH contract address.
    /// @param _aumMultisigAddr AUM multisig address.
    constructor(IJonesAsset _jonesETH, address _aumMultisigAddr) {
        require(_aumMultisigAddr != address(0), "Invalid aum multisig address");
        jonesETHToken = _jonesETH;
        transferOwnership(_aumMultisigAddr);
    }

    // ============================== Depositing ==============================

    /// Mint jETH by depositing ETH into the vault.
    /// @param _amount Amount of ETH to deposit.
    function depositETH(uint256 _amount) public payable {
        require(DEPOSIT_WINDOW_OPEN, "Deposit window is not open.");
        require(_amount > 0, "Invalid amount");
        require(msg.value >= _amount, "Insufficient ETH");

        if (vaultCapSet) {
            require(
                address(this).balance + msg.value <= vaultCapGwei,
                "Amount exceeds vault cap."
            );
        }

        uint256 mintableJEth = convertToJAsset(_amount);

        // mint jAsset
        jonesETHToken.mint(msg.sender, mintableJEth);

        emit Deposited(msg.sender, mintableJEth, _amount);
    }

    /// Deposit fallback function.
    receive() external payable nonReentrant {
        require(msg.sender != owner(), "Use multisigDepositAssets fn");
        address beneficiary = msg.sender;
        require(beneficiary != address(0), "invalid address");
        require(msg.value > 0, "invalid amount");
        depositETH(msg.value);
    }

    // ============================== Claiming ==============================

    /// Burn jETH and redeem ETH from the vault.
    /// @dev Assumes both tokens have same decimal places.
    /// @param _amount Amount of jETH to burn.
    function claimETH(uint256 _amount) public nonReentrant {
        require(CLAIM_WINDOW_OPEN, "Claim window is not open.");
        require(_amount > 0, "Amount must be greater than 0.");
        require(
            jonesETHToken.balanceOf(msg.sender) >= _amount,
            "Not enough jETH."
        );
        uint256 redeemableEth = convertToAsset(_amount);
        require(
            address(this).balance >= redeemableEth,
            "Not enough ETH in the contract."
        );

        // burn jAsset
        jonesETHToken.burnFrom(msg.sender, _amount);

        // redeem ETH
        payable(msg.sender).transfer(redeemableEth);

        emit Claimed(msg.sender, redeemableEth, _amount);
    }

    // ============================== Setters ==============================

    /// @notice Open/close vault for deposits.
    /// @param _open True to open, false to close.
    /// @param _vaultCapSet True if vault cap is set.
    /// @param _vaultCapGwei Vault cap (18 decimal).
    function setDepositWindowOpen(
        bool _open,
        bool _vaultCapSet,
        uint256 _vaultCapGwei
    ) public onlyOwner {
        require(!CLAIM_WINDOW_OPEN, "Claim window is open");
        require(
            _open != DEPOSIT_WINDOW_OPEN,
            "Deposit window is already open."
        );
        if (!_open) {
            // if closing deposits take snapshot
            snapshotJonesETHSupply = jonesETHToken.totalSupply();
            updateVaultBalanceSnapshot();
        } else if (_vaultCapSet) {
            // if opening deposits and deposit cap
            require(_vaultCapGwei > 0, "Vault cap must be greater than 0");
            vaultCapGwei = _vaultCapGwei;
            vaultCapSet = true;
        }
        DEPOSIT_WINDOW_OPEN = _open;
    }

    /// Open/close vault for burning and redeeming.
    /// @param _open True to open, false to close.
    function setClaimWindowOpen(bool _open) public onlyOwner {
        require(!DEPOSIT_WINDOW_OPEN, "Deposit window is open");
        CLAIM_WINDOW_OPEN = _open;
    }

    /// Update vault value snapshot.
    /// @dev This function is called by the AUM multisig.
    function updateVaultBalanceSnapshot() public onlyOwner {
        snapshotVaultBalance = address(this).balance;
        emit SnapshotBalance(snapshotVaultBalance);
    }

    // ============================== Views ==============================

    /// Calculates claimable ETH for a given user.
    /// @return claimable ETH.
    /// @param _user user address.
    function claimableEth(address _user) public view returns (uint256) {
        uint256 usrBalance = jonesETHToken.balanceOf(_user);
        if (usrBalance > 0) {
            return convertToAsset(usrBalance);
        }
        return 0;
    }

    /// Calculates claimable ETH amount for a given amount of jETH
    /// @param _jAssetAmount Amount of jETH.
    /// @return claimable ETH amount.
    function convertToAsset(uint256 _jAssetAmount)
        public
        view
        returns (uint256)
    {
        return
            _jAssetAmount.mul(snapshotVaultBalance).div(snapshotJonesETHSupply);
    }

    /// Calculates mintable jETH amount for a given amount of ETH
    /// @param _assetAmount Amount of ETH.
    /// @return mintable jETH amount.
    function convertToJAsset(uint256 _assetAmount)
        public
        view
        returns (uint256)
    {
        return
            _assetAmount.mul(snapshotJonesETHSupply).div(snapshotVaultBalance);
    }

    // ============================== AUM multisig functions ==============================

    function multisigDepositAssets(uint256 _amount) public payable onlyOwner {
        require(
            !DEPOSIT_WINDOW_OPEN && !CLAIM_WINDOW_OPEN,
            "Deposit and claim windows are open."
        );
        require(msg.value >= _amount, "Insufficient ETH");
        updateVaultBalanceSnapshot();
        emit DepositFromMultisig(_amount);
    }

    /// Withdraws all ETH from the vault to the aumMultisigAddr address.
    function withdrawToMultisig() public onlyOwner {
        require(
            !DEPOSIT_WINDOW_OPEN && !CLAIM_WINDOW_OPEN,
            "Deposit and claim windows are open."
        );
        uint256 assetBalance = address(this).balance;
        require(assetBalance > 0, "No ETH in the contract.");
        payable(msg.sender).transfer(assetBalance);
        emit WithdrawalToMultisig(assetBalance);
    }
}

File 2 of 7 : IJonesAsset.sol
// SPDX-License-Identifier: GPL-3.0
/*                            ******@@@@@@@@@**@*                               
                        ***@@@@@@@@@@@@@@@@@@@@@@**                             
                     *@@@@@@**@@@@@@@@@@@@@@@@@*@@@*                            
                  *@@@@@@@@@@@@@@@@@@@*@@@@@@@@@@@*@**                          
                 *@@@@@@@@@@@@@@@@@@*@@@@@@@@@@@@@@@@@*                         
                **@@@@@@@@@@@@@@@@@*@@@@@@@@@@@@@@@@@@@**                       
                **@@@@@@@@@@@@@@@*@@@@@@@@@@@@@@@@@@@@@@@*                      
                **@@@@@@@@@@@@@@@@*************************                    
                **@@@@@@@@***********************************                   
                 *@@@***********************&@@@@@@@@@@@@@@@****,    ******@@@@*
           *********************@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@************* 
      ***@@@@@@@@@@@@@@@*****@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@****@@*********      
   **@@@@@**********************@@@@*****************#@@@@**********            
  *@@******************************************************                     
 *@************************************                                         
 @*******************************                                               
 *@*************************                                                    
   ********************* 
   
    /$$$$$                                               /$$$$$$$   /$$$$$$   /$$$$$$ 
   |__  $$                                              | $$__  $$ /$$__  $$ /$$__  $$
      | $$  /$$$$$$  /$$$$$$$   /$$$$$$   /$$$$$$$      | $$  \ $$| $$  \ $$| $$  \ $$
      | $$ /$$__  $$| $$__  $$ /$$__  $$ /$$_____/      | $$  | $$| $$$$$$$$| $$  | $$
 /$$  | $$| $$  \ $$| $$  \ $$| $$$$$$$$|  $$$$$$       | $$  | $$| $$__  $$| $$  | $$
| $$  | $$| $$  | $$| $$  | $$| $$_____/ \____  $$      | $$  | $$| $$  | $$| $$  | $$
|  $$$$$$/|  $$$$$$/| $$  | $$|  $$$$$$$ /$$$$$$$/      | $$$$$$$/| $$  | $$|  $$$$$$/
 \______/  \______/ |__/  |__/ \_______/|_______/       |_______/ |__/  |__/ \______/                                      
*/

pragma solidity ^0.8.2;

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

interface IJonesAsset is IERC20 {
    /// @dev JonesAsset interface
    function mint(address recipient, uint256 amount) external;

    function giveMinterRole(address account) external;

    function revokeMinterRole(address account) external;

    /// @dev IERC20Burnable interface
    function burnFrom(address account, uint256 amount) external;
}

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

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 4 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;
    }
}

File 5 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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);
}

File 6 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 7 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);
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"contract IJonesAsset","name":"_jonesETH","type":"address"},{"internalType":"address","name":"_aumMultisigAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"uint256","name":"_assetAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_jonesAssetAmount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_assetAmount","type":"uint256"}],"name":"DepositFromMultisig","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"uint256","name":"_assetAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_jonesAssetAmount","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_assetAmount","type":"uint256"}],"name":"SnapshotBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_assetAmount","type":"uint256"}],"name":"WithdrawalToMultisig","type":"event"},{"inputs":[],"name":"CLAIM_WINDOW_OPEN","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_WINDOW_OPEN","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"claimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"claimableEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_jAssetAmount","type":"uint256"}],"name":"convertToAsset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_assetAmount","type":"uint256"}],"name":"convertToJAsset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"jonesETHToken","outputs":[{"internalType":"contract IJonesAsset","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"multisigDepositAssets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"setClaimWindowOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"},{"internalType":"bool","name":"_vaultCapSet","type":"bool"},{"internalType":"uint256","name":"_vaultCapGwei","type":"uint256"}],"name":"setDepositWindowOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snapshotJonesETHSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snapshotVaultBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateVaultBalanceSnapshot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultCapGwei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultCapSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawToMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526002805462ffffff60a01b19169055600160048190556005553480156200002a57600080fd5b50604051620014f0380380620014f08339810160408190526200004d916200021d565b6200005833620000e6565b600180556001600160a01b038116620000b85760405162461bcd60e51b815260206004820152601c60248201527f496e76616c69642061756d206d756c746973696720616464726573730000000060448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b038416179055620000de8162000136565b50506200025c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620001925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000af565b6001600160a01b038116620001f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000af565b6200020481620000e6565b50565b6001600160a01b03811681146200020457600080fd5b600080604083850312156200023157600080fd5b82516200023e8162000207565b6020840151909250620002518162000207565b809150509250929050565b611284806200026c6000396000f3fe6080604052600436106101235760003560e01c806377d101e4116100a0578063a3a9777811610064578063a3a9777814610441578063c722328d14610461578063f2fde38b14610476578063f9391f8e14610496578063fe96973a146104b757600080fd5b806377d101e4146103a55780638584a23c146103c65780638da5cb5b146103d95780639f4cc88c1461040b5780639fe929401461042157600080fd5b80635358fbda116100e75780635358fbda1461031757806358153ffc1461032a578063715018a61461035b57806375a122ab1461037057806376186c7a1461039057600080fd5b806306bd2e0314610276578063213ee1b7146102985780634793dc40146102c15780634b5a2465146102e15780635101f3821461030157600080fd5b3661027157600260015414156101805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026001556000546001600160a01b03163314156101e05760405162461bcd60e51b815260206004820152601c60248201527f557365206d756c74697369674465706f73697441737365747320666e000000006044820152606401610177565b33806102205760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b6044820152606401610177565b600034116102615760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b6044820152606401610177565b61026a346104d7565b5060018055005b600080fd5b34801561028257600080fd5b506102966102913660046110b5565b6106cc565b005b3480156102a457600080fd5b506102ae60045481565b6040519081526020015b60405180910390f35b3480156102cd57600080fd5b506102ae6102dc3660046110f1565b6108c5565b3480156102ed57600080fd5b506102ae6102fc36600461111a565b610958565b34801561030d57600080fd5b506102ae60055481565b61029661032536600461111a565b6104d7565b34801561033657600080fd5b5060025461034b90600160a81b900460ff1681565b60405190151581526020016102b8565b34801561036757600080fd5b50610296610981565b34801561037c57600080fd5b5061029661038b366004611133565b6109b7565b34801561039c57600080fd5b50610296610a52565b3480156103b157600080fd5b5060025461034b90600160a01b900460ff1681565b6102966103d436600461111a565b610aad565b3480156103e557600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102b8565b34801561041757600080fd5b506102ae60035481565b34801561042d57600080fd5b506002546103f3906001600160a01b031681565b34801561044d57600080fd5b506102ae61045c36600461111a565b610b90565b34801561046d57600080fd5b50610296610bad565b34801561048257600080fd5b506102966104913660046110f1565b610cc1565b3480156104a257600080fd5b5060025461034b90600160b01b900460ff1681565b3480156104c357600080fd5b506102966104d236600461111a565b610d5c565b600254600160a01b900460ff166105305760405162461bcd60e51b815260206004820152601b60248201527f4465706f7369742077696e646f77206973206e6f74206f70656e2e00000000006044820152606401610177565b600081116105715760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606401610177565b803410156105b45760405162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce8408aa8960831b6044820152606401610177565b600254600160b01b900460ff1615610621576003546105d33447611164565b11156106215760405162461bcd60e51b815260206004820152601960248201527f416d6f756e742065786365656473207661756c74206361702e000000000000006044820152606401610177565b600061062c82610b90565b6002546040516340c10f1960e01b8152336004820152602481018390529192506001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561067957600080fd5b505af115801561068d573d6000803e3d6000fd5b50506040518481528392503391507f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca9060200160405180910390a35050565b6000546001600160a01b031633146106f65760405162461bcd60e51b81526004016101779061117c565b600254600160a81b900460ff16156107475760405162461bcd60e51b815260206004820152601460248201527321b630b4b6903bb4b73237bb9034b99037b832b760611b6044820152606401610177565b600260149054906101000a900460ff16151583151514156107aa5760405162461bcd60e51b815260206004820152601f60248201527f4465706f7369742077696e646f7720697320616c7265616479206f70656e2e006044820152606401610177565b8261083657600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610802573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082691906111b1565b600555610831610a52565b6108a5565b81156108a5576000811161088c5760405162461bcd60e51b815260206004820181905260248201527f5661756c7420636170206d7573742062652067726561746572207468616e20306044820152606401610177565b60038190556002805460ff60b01b1916600160b01b1790555b505060028054911515600160a01b0260ff60a01b19909216919091179055565b6002546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a0823190602401602060405180830381865afa158015610913573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093791906111b1565b9050801561094f5761094881610958565b9392505050565b50600092915050565b600061097b6005546109756004548561103890919063ffffffff16565b90611044565b92915050565b6000546001600160a01b031633146109ab5760405162461bcd60e51b81526004016101779061117c565b6109b56000611050565b565b6000546001600160a01b031633146109e15760405162461bcd60e51b81526004016101779061117c565b600254600160a01b900460ff1615610a345760405162461bcd60e51b81526020600482015260166024820152752232b837b9b4ba103bb4b73237bb9034b99037b832b760511b6044820152606401610177565b60028054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314610a7c5760405162461bcd60e51b81526004016101779061117c565b4760048190556040517fd3a860d9eb3efb5269fb997752a1f3e7228b1ac39bdd52dd65164595b98ab93a90600090a2565b6000546001600160a01b03163314610ad75760405162461bcd60e51b81526004016101779061117c565b600254600160a01b900460ff16158015610afb5750600254600160a81b900460ff16155b610b175760405162461bcd60e51b8152600401610177906111ca565b80341015610b5a5760405162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce8408aa8960831b6044820152606401610177565b610b62610a52565b60405181907fcc713cde4bc7c09537ca5cbd7bd299c5666c25a07ffa992cdd83805b4c28db0090600090a250565b600061097b6004546109756005548561103890919063ffffffff16565b6000546001600160a01b03163314610bd75760405162461bcd60e51b81526004016101779061117c565b600254600160a01b900460ff16158015610bfb5750600254600160a81b900460ff16155b610c175760405162461bcd60e51b8152600401610177906111ca565b4780610c655760405162461bcd60e51b815260206004820152601760248201527f4e6f2045544820696e2074686520636f6e74726163742e0000000000000000006044820152606401610177565b604051339082156108fc029083906000818181858888f19350505050158015610c92573d6000803e3d6000fd5b5060405181907f054c4508e43472a656bc4325c1fee9a25ff10bfeb1d29f1d5f2f3070e1061ad990600090a250565b6000546001600160a01b03163314610ceb5760405162461bcd60e51b81526004016101779061117c565b6001600160a01b038116610d505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610177565b610d5981611050565b50565b60026001541415610daf5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610177565b6002600181905554600160a81b900460ff16610e0d5760405162461bcd60e51b815260206004820152601960248201527f436c61696d2077696e646f77206973206e6f74206f70656e2e000000000000006044820152606401610177565b60008111610e5d5760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e00006044820152606401610177565b6002546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec991906111b1565b1015610f0a5760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b4103522aa241760811b6044820152606401610177565b6000610f1582610958565b905080471015610f675760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f7567682045544820696e2074686520636f6e74726163742e006044820152606401610177565b60025460405163079cc67960e41b8152336004820152602481018490526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f19350505050158015610ff8573d6000803e3d6000fd5b50604051828152819033907f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a9060200160405180910390a3505060018055565b6000610948828461120d565b6000610948828461122c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b803580151581146110b057600080fd5b919050565b6000806000606084860312156110ca57600080fd5b6110d3846110a0565b92506110e1602085016110a0565b9150604084013590509250925092565b60006020828403121561110357600080fd5b81356001600160a01b038116811461094857600080fd5b60006020828403121561112c57600080fd5b5035919050565b60006020828403121561114557600080fd5b610948826110a0565b634e487b7160e01b600052601160045260246000fd5b600082198211156111775761117761114e565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156111c357600080fd5b5051919050565b60208082526023908201527f4465706f73697420616e6420636c61696d2077696e646f777320617265206f7060408201526232b71760e91b606082015260800190565b60008160001904831182151516156112275761122761114e565b500290565b60008261124957634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220b709e71f844a583258b81201406421622525c7a2f42c3818a9766ca88cfc8ff264736f6c634300080a0033000000000000000000000000662d0f9ff837a51cf89a1fe7e0882a906dac08a3000000000000000000000000dd0556ddcfe7cdab3540e7f09cb366f498d90774

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

000000000000000000000000662d0f9ff837a51cf89a1fe7e0882a906dac08a3000000000000000000000000dd0556ddcfe7cdab3540e7f09cb366f498d90774

-----Decoded View---------------
Arg [0] : _jonesETH (address): 0x662d0f9ff837a51cf89a1fe7e0882a906dac08a3
Arg [1] : _aumMultisigAddr (address): 0xdd0556ddcfe7cdab3540e7f09cb366f498d90774

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000662d0f9ff837a51cf89a1fe7e0882a906dac08a3
Arg [1] : 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.