ETH Price: $3,487.65 (+2.32%)

Contract

0x9D03bb2092270648d7480049d0E58d2FcF0E5123
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit For214679472024-12-23 21:44:5935 hrs ago1734990299IN
0x9D03bb20...FcF0E5123
0 ETH0.0012035413.08772322
Deposit For214679292024-12-23 21:41:2335 hrs ago1734990083IN
0x9D03bb20...FcF0E5123
0 ETH0.0010865714.5147571
Deposit For214678992024-12-23 21:35:2335 hrs ago1734989723IN
0x9D03bb20...FcF0E5123
0 ETH0.0016414717.85452895
Deposit For214349252024-12-19 6:57:356 days ago1734591455IN
0x9D03bb20...FcF0E5123
0 ETH0.000594628.48593953
Deposit For213595082024-12-08 18:16:4716 days ago1733681807IN
0x9D03bb20...FcF0E5123
0 ETH0.0013134814.28324936
Deposit For213519042024-12-07 16:48:1117 days ago1733590091IN
0x9D03bb20...FcF0E5123
0 ETH0.0009581814.30811325
Deposit For213518972024-12-07 16:46:4717 days ago1733590007IN
0x9D03bb20...FcF0E5123
0 ETH0.0013300314.98667232
Deposit For213401082024-12-06 1:15:2319 days ago1733447723IN
0x9D03bb20...FcF0E5123
0 ETH0.0015655519.00595389
Deposit For213395992024-12-05 23:33:2319 days ago1733441603IN
0x9D03bb20...FcF0E5123
0 ETH0.0015998624.51069999
Deposit For213339122024-12-05 4:28:5920 days ago1733372939IN
0x9D03bb20...FcF0E5123
0 ETH0.0015253920.37987867
Deposit For213338982024-12-05 4:26:1120 days ago1733372771IN
0x9D03bb20...FcF0E5123
0 ETH0.0014355819.17380463
Deposit For213338822024-12-05 4:22:5920 days ago1733372579IN
0x9D03bb20...FcF0E5123
0 ETH0.0018636820.2715527
Deposit For213294682024-12-04 13:35:4720 days ago1733319347IN
0x9D03bb20...FcF0E5123
0 ETH0.0013840319.75167271
Deposit For213291792024-12-04 12:36:5920 days ago1733315819IN
0x9D03bb20...FcF0E5123
0 ETH0.0013673120.94795863
Deposit For213290702024-12-04 12:15:1120 days ago1733314511IN
0x9D03bb20...FcF0E5123
0 ETH0.0014156121.68790986
Deposit For213244722024-12-03 20:49:5921 days ago1733258999IN
0x9D03bb20...FcF0E5123
0 ETH0.0020278531.07926067
Deposit For213244492024-12-03 20:45:2321 days ago1733258723IN
0x9D03bb20...FcF0E5123
0 ETH0.0023328233.29759715
Deposit For213244282024-12-03 20:41:1121 days ago1733258471IN
0x9D03bb20...FcF0E5123
0 ETH0.0018706326.70049034
Deposit For213244032024-12-03 20:36:1121 days ago1733258171IN
0x9D03bb20...FcF0E5123
0 ETH0.0019903528.4140883
Deposit For213243562024-12-03 20:26:3521 days ago1733257595IN
0x9D03bb20...FcF0E5123
0 ETH0.001766225.20988655
Deposit For213242922024-12-03 20:13:4721 days ago1733256827IN
0x9D03bb20...FcF0E5123
0 ETH0.0024830528.49629517
Deposit For212930272024-11-29 11:22:4725 days ago1732879367IN
0x9D03bb20...FcF0E5123
0 ETH0.0011169212.14731729
Deposit For212813232024-11-27 19:58:3527 days ago1732737515IN
0x9D03bb20...FcF0E5123
0 ETH0.0015620518.58348228
Deposit For212700152024-11-26 6:04:2329 days ago1732601063IN
0x9D03bb20...FcF0E5123
0 ETH0.000662057.59583037
Deposit For212688732024-11-26 2:14:5929 days ago1732587299IN
0x9D03bb20...FcF0E5123
0 ETH0.0004556.49235147
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Wrapper

Compiler Version
v0.8.27+commit.40a35a09

Optimization Enabled:
Yes with 999999 runs

Other Settings:
cancun EvmVersion
File 1 of 2 : Wrapper.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity 0.8.27;

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

/// @title Wrapper
/// @author Morpho Association
/// @custom:security-contact [email protected]
/// @notice The Wrapper contract to migrate from legacy MORPHO tokens.
contract Wrapper {
    /* CONSTANTS */

    /// @notice The address of the legacy Morpho token.
    address public constant LEGACY_MORPHO = 0x9994E35Db50125E0DF82e4c2dde62496CE330999;

    /* IMMUTABLES */

    /// @notice The address of the new Morpho token.
    address public immutable NEW_MORPHO;

    /* ERRORS */

    /// @notice Reverts if the address is the zero address.
    error ZeroAddress();

    /// @notice Reverts if the address is the contract address.
    error SelfAddress();

    /* CONSTRUCTOR */

    /// @dev morphoToken address can be precomputed using create2.
    constructor(address morphoToken) {
        require(morphoToken != address(0), ZeroAddress());

        NEW_MORPHO = morphoToken;
    }

    /* EXTERNAL */

    /// @dev Compliant to `ERC20Wrapper` contract from OZ for convenience.
    function depositFor(address account, uint256 value) external returns (bool) {
        require(account != address(0), ZeroAddress());
        require(account != address(this), SelfAddress());

        IERC20(LEGACY_MORPHO).transferFrom(msg.sender, address(this), value);
        IERC20(NEW_MORPHO).transfer(account, value);
        return true;
    }

    /// @dev Compliant to `ERC20Wrapper` contract from OZ for convenience.
    function withdrawTo(address account, uint256 value) external returns (bool) {
        require(account != address(0), ZeroAddress());
        require(account != address(this), SelfAddress());

        IERC20(NEW_MORPHO).transferFrom(msg.sender, address(this), value);
        IERC20(LEGACY_MORPHO).transfer(account, value);
        return true;
    }

    /// @dev To ease wrapping via the bundler contract:
    /// https://github.com/morpho-org/morpho-blue-bundlers/blob/main/src/ERC20WrapperBundler.sol
    function underlying() external pure returns (address) {
        return LEGACY_MORPHO;
    }
}

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

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/",
    "ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"morphoToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"SelfAddress","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"LEGACY_MORPHO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NEW_MORPHO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"depositFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdrawTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60a03461008c57601f6105ed38819003918201601f19168301916001600160401b038311848410176100905780849260209460405283398101031261008c57516001600160a01b03811680820361008c571561007d5760805260405161054890816100a5823960805181818160ed01528181610220015261036b0152f35b63d92e233d60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c908163205c2878146102fb575080632f4f21e2146101115780636f307dc3146100535780639b493d9a146100a35763d4bd8fdc14610053575f80fd5b3461009f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009f576020604051739994e35db50125e0df82e4c2dde62496ce3309998152f35b5f80fd5b3461009f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461009f5761011f3661043b565b9073ffffffffffffffffffffffffffffffffffffffff811680156102d35730146102ab576040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052916020836064815f739994e35db50125e0df82e4c2dde62496ce3309995af19182156102855761020693602093610290575b5060405193849283927fa9059cbb000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561028557610258575b602060405160018152f35b6102799060203d60201161027e575b610271818361048c565b8101906104fa565b61024d565b503d610267565b6040513d5f823e3d90fd5b6102a690843d861161027e57610271818361048c565b6101ae565b7f2007aa4c000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461009f576103093661043b565b73ffffffffffffffffffffffffffffffffffffffff821680156102d35730146102ab577f23b872dd000000000000000000000000000000000000000000000000000000008352336004840152306024840152604483018190526020836064815f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19182156102855761040c93602093610290575060405193849283927fa9059cbb000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f739994e35db50125e0df82e4c2dde62496ce3309995af180156102855761025857602060405160018152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261009f5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009f579060243590565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104cd57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9081602091031261009f5751801515810361009f579056fea26469706673582212206aea5d68435f480d7af9b94d09c7996c37c2411dc9ccadd7f41e0530c2b9e8f864736f6c634300081b003300000000000000000000000058d97b57bb95320f9a05dc918aef65434969c2b2

Deployed Bytecode

0x6080806040526004361015610012575f80fd5b5f3560e01c908163205c2878146102fb575080632f4f21e2146101115780636f307dc3146100535780639b493d9a146100a35763d4bd8fdc14610053575f80fd5b3461009f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009f576020604051739994e35db50125e0df82e4c2dde62496ce3309998152f35b5f80fd5b3461009f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009f57602060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000058d97b57bb95320f9a05dc918aef65434969c2b2168152f35b3461009f5761011f3661043b565b9073ffffffffffffffffffffffffffffffffffffffff811680156102d35730146102ab576040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052916020836064815f739994e35db50125e0df82e4c2dde62496ce3309995af19182156102855761020693602093610290575b5060405193849283927fa9059cbb000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000058d97b57bb95320f9a05dc918aef65434969c2b2165af1801561028557610258575b602060405160018152f35b6102799060203d60201161027e575b610271818361048c565b8101906104fa565b61024d565b503d610267565b6040513d5f823e3d90fd5b6102a690843d861161027e57610271818361048c565b6101ae565b7f2007aa4c000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461009f576103093661043b565b73ffffffffffffffffffffffffffffffffffffffff821680156102d35730146102ab577f23b872dd000000000000000000000000000000000000000000000000000000008352336004840152306024840152604483018190526020836064815f7f00000000000000000000000058d97b57bb95320f9a05dc918aef65434969c2b273ffffffffffffffffffffffffffffffffffffffff165af19182156102855761040c93602093610290575060405193849283927fa9059cbb000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f739994e35db50125e0df82e4c2dde62496ce3309995af180156102855761025857602060405160018152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261009f5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009f579060243590565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104cd57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9081602091031261009f5751801515810361009f579056fea26469706673582212206aea5d68435f480d7af9b94d09c7996c37c2411dc9ccadd7f41e0530c2b9e8f864736f6c634300081b0033

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

00000000000000000000000058d97b57bb95320f9a05dc918aef65434969c2b2

-----Decoded View---------------
Arg [0] : morphoToken (address): 0x58D97B57BB95320F9a05dC918Aef65434969c2B2

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000058d97b57bb95320f9a05dc918aef65434969c2b2


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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