ETH Price: $2,041.96 (+3.23%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit For243788542026-02-03 20:57:113 days ago1770152231IN
Morpho: MORPHO wrapper
0 ETH0.000072830.88294075
Deposit For242694412026-01-19 14:32:5918 days ago1768833179IN
Morpho: MORPHO wrapper
0 ETH0.000005910.09060962
Deposit For242694362026-01-19 14:31:5918 days ago1768833119IN
Morpho: MORPHO wrapper
0 ETH0.000006410.09154456
Deposit For242334392026-01-14 14:08:3524 days ago1768399715IN
Morpho: MORPHO wrapper
0 ETH0.000012070.16706595
Deposit For241972612026-01-09 12:55:4729 days ago1767963347IN
Morpho: MORPHO wrapper
0 ETH0.000148672.0566186
Deposit For241682222026-01-05 11:40:3533 days ago1767613235IN
Morpho: MORPHO wrapper
0 ETH0.000006080.06976546
Deposit For241052972025-12-27 16:54:5941 days ago1766854499IN
Morpho: MORPHO wrapper
0 ETH0.000003120.04326442
Deposit For240347782025-12-17 20:40:1151 days ago1766004011IN
Morpho: MORPHO wrapper
0 ETH0.000002180.03339368
Deposit For239414792025-12-04 18:35:4764 days ago1764873347IN
Morpho: MORPHO wrapper
0 ETH0.000003980.06105038
Deposit For239414782025-12-04 18:35:3564 days ago1764873335IN
Morpho: MORPHO wrapper
0 ETH0.000005740.06252358
Deposit For237921992025-11-13 18:54:2385 days ago1763060063IN
Morpho: MORPHO wrapper
0 ETH0.000279073.03393513
Deposit For236674962025-10-27 8:08:59103 days ago1761552539IN
Morpho: MORPHO wrapper
0 ETH0.000009490.10318928
Deposit For236312332025-10-22 6:18:11108 days ago1761113891IN
Morpho: MORPHO wrapper
0 ETH0.000007990.0970678
Withdraw To235995402025-10-17 19:42:35112 days ago1760730155IN
Morpho: MORPHO wrapper
0 ETH0.000024140.753624
Deposit For235995292025-10-17 19:40:23112 days ago1760730023IN
Morpho: MORPHO wrapper
0 ETH0.000013210.38564259
Deposit For235995212025-10-17 19:38:47112 days ago1760729927IN
Morpho: MORPHO wrapper
0 ETH0.000014910.43128452
Deposit For235926562025-10-16 20:37:35113 days ago1760647055IN
Morpho: MORPHO wrapper
0 ETH0.000156972.39974368
Deposit For235299482025-10-08 2:06:23122 days ago1759889183IN
Morpho: MORPHO wrapper
0 ETH0.000009280.14226174
Deposit For235104212025-10-05 8:38:23125 days ago1759653503IN
Morpho: MORPHO wrapper
0 ETH0.00000990.11366181
Deposit For233531632025-09-13 9:10:59147 days ago1757754659IN
Morpho: MORPHO wrapper
0 ETH0.000015230.23294852
Deposit For233317342025-09-10 9:15:59150 days ago1757495759IN
Morpho: MORPHO wrapper
0 ETH0.000014250.20339116
Deposit For231970382025-08-22 13:52:47169 days ago1755870767IN
Morpho: MORPHO wrapper
0 ETH0.000163712.50779249
Deposit For231378982025-08-14 7:47:35177 days ago1755157655IN
Morpho: MORPHO wrapper
0 ETH0.000062160.7130763
Withdraw To231378792025-08-14 7:43:47177 days ago1755157427IN
Morpho: MORPHO wrapper
0 ETH0.000024980.77995341
Withdraw To230709912025-08-04 23:29:11186 days ago1754350151IN
Morpho: MORPHO wrapper
0 ETH0.00016242.18383733
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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
// 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;
    }
}

// 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

API
[{"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 Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.