Latest 25 from a total of 164 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Deposit For | 24378854 | 3 days ago | IN | 0 ETH | 0.00007283 | ||||
| Deposit For | 24269441 | 18 days ago | IN | 0 ETH | 0.00000591 | ||||
| Deposit For | 24269436 | 18 days ago | IN | 0 ETH | 0.00000641 | ||||
| Deposit For | 24233439 | 24 days ago | IN | 0 ETH | 0.00001207 | ||||
| Deposit For | 24197261 | 29 days ago | IN | 0 ETH | 0.00014867 | ||||
| Deposit For | 24168222 | 33 days ago | IN | 0 ETH | 0.00000608 | ||||
| Deposit For | 24105297 | 41 days ago | IN | 0 ETH | 0.00000312 | ||||
| Deposit For | 24034778 | 51 days ago | IN | 0 ETH | 0.00000218 | ||||
| Deposit For | 23941479 | 64 days ago | IN | 0 ETH | 0.00000398 | ||||
| Deposit For | 23941478 | 64 days ago | IN | 0 ETH | 0.00000574 | ||||
| Deposit For | 23792199 | 85 days ago | IN | 0 ETH | 0.00027907 | ||||
| Deposit For | 23667496 | 103 days ago | IN | 0 ETH | 0.00000949 | ||||
| Deposit For | 23631233 | 108 days ago | IN | 0 ETH | 0.00000799 | ||||
| Withdraw To | 23599540 | 112 days ago | IN | 0 ETH | 0.00002414 | ||||
| Deposit For | 23599529 | 112 days ago | IN | 0 ETH | 0.00001321 | ||||
| Deposit For | 23599521 | 112 days ago | IN | 0 ETH | 0.00001491 | ||||
| Deposit For | 23592656 | 113 days ago | IN | 0 ETH | 0.00015697 | ||||
| Deposit For | 23529948 | 122 days ago | IN | 0 ETH | 0.00000928 | ||||
| Deposit For | 23510421 | 125 days ago | IN | 0 ETH | 0.0000099 | ||||
| Deposit For | 23353163 | 147 days ago | IN | 0 ETH | 0.00001523 | ||||
| Deposit For | 23331734 | 150 days ago | IN | 0 ETH | 0.00001425 | ||||
| Deposit For | 23197038 | 169 days ago | IN | 0 ETH | 0.00016371 | ||||
| Deposit For | 23137898 | 177 days ago | IN | 0 ETH | 0.00006216 | ||||
| Withdraw To | 23137879 | 177 days ago | IN | 0 ETH | 0.00002498 | ||||
| Withdraw To | 23070991 | 186 days ago | IN | 0 ETH | 0.0001624 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Wrapper
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
Yes with 999999 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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);
}{
"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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Net Worth in USD
$692,089,298.83
Net Worth in ETH
338,934.36402
Token Allocations
MORPHO
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1.15 | 601,816,781.5936 | $692,089,298.83 |
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.