Overview
ETH Balance
ETH Value
$0.00Latest 5 from a total of 5 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Create Morpho Va... | 17942826 | 15 days ago | IN | 0 ETH | 0.00000235 | ||||
| Create Morpho Va... | 17939823 | 15 days ago | IN | 0 ETH | 0.00000235 | ||||
| Create Morpho Va... | 17440628 | 21 days ago | IN | 0 ETH | 0.00000135 | ||||
| Create Morpho Va... | 17428500 | 21 days ago | IN | 0 ETH | 0.00000234 | ||||
| Create Morpho Va... | 17428098 | 21 days ago | IN | 0 ETH | 0.00000185 |
Latest 7 internal transactions
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 17942826 | 15 days ago | Contract Creation | 0 ETH | |||
| 17939823 | 15 days ago | Contract Creation | 0 ETH | |||
| 17440628 | 21 days ago | Contract Creation | 0 ETH | |||
| 17428500 | 21 days ago | Contract Creation | 0 ETH | |||
| 17428098 | 21 days ago | Contract Creation | 0 ETH | |||
| 13096629 | 71 days ago | Contract Creation | 0 ETH | |||
| 13096629 | 71 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Contract Source Code Verified (Exact Match)
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity 0.8.28;
import {MorphoVaultV1Adapter} from "./MorphoVaultV1Adapter.sol";
import {IMorphoVaultV1AdapterFactory} from "./interfaces/IMorphoVaultV1AdapterFactory.sol";
contract MorphoVaultV1AdapterFactory is IMorphoVaultV1AdapterFactory {
/* STORAGE */
mapping(address parentVault => mapping(address morphoVaultV1 => address)) public morphoVaultV1Adapter;
mapping(address account => bool) public isMorphoVaultV1Adapter;
/* FUNCTIONS */
/// @dev Returns the address of the deployed MorphoVaultV1Adapter.
function createMorphoVaultV1Adapter(address parentVault, address morphoVaultV1) external returns (address) {
address _morphoVaultV1Adapter = address(new MorphoVaultV1Adapter{salt: bytes32(0)}(parentVault, morphoVaultV1));
morphoVaultV1Adapter[parentVault][morphoVaultV1] = _morphoVaultV1Adapter;
isMorphoVaultV1Adapter[_morphoVaultV1Adapter] = true;
emit CreateMorphoVaultV1Adapter(parentVault, morphoVaultV1, _morphoVaultV1Adapter);
return _morphoVaultV1Adapter;
}
}// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity 0.8.28;
import {IVaultV2} from "../interfaces/IVaultV2.sol";
import {IERC4626} from "../interfaces/IERC4626.sol";
import {IERC20} from "../interfaces/IERC20.sol";
import {IMorphoVaultV1Adapter} from "./interfaces/IMorphoVaultV1Adapter.sol";
import {SafeERC20Lib} from "../libraries/SafeERC20Lib.sol";
/// @dev Designed, developed and audited for Morpho Vaults v1 (v1.0 and v1.1) (also known as MetaMorpho). Integration
/// with other vaults must be carefully assessed from a security standpoint.
/// @dev This adapter must be used with Morpho Vaults v1 that are protected against inflation attacks with an initial
/// deposit. See https://docs.openzeppelin.com/contracts/5.x/erc4626#inflation-attack.
/// @dev Must not be used with a Morpho Vault v1 which has a market with an Irm that can re-enter the parent vault or
/// the adapter.
/// @dev Morpho Vaults v1.1 do not realize bad debt, so Morpho Vaults v2 supplying in them will not realize the
/// corresponding bad debt.
/// @dev Losses that correspond to rounding errors are realizable.
/// @dev Shares of the Morpho Vault v1 cannot be skimmed (unlike any other token).
/// @dev If expectedSupplyAssets reverts for a market of the morphoVaultV1, realAssets will revert and the vault will
/// not be able to accrueInterest.
/// @dev Shouldn't be used alongside another adapter that re-uses the id (abi.encode("this", address(this)).
contract MorphoVaultV1Adapter is IMorphoVaultV1Adapter {
/* IMMUTABLES */
address public immutable factory;
address public immutable parentVault;
address public immutable morphoVaultV1;
bytes32 public immutable adapterId;
/* STORAGE */
address public skimRecipient;
/* FUNCTIONS */
constructor(address _parentVault, address _morphoVaultV1) {
factory = msg.sender;
parentVault = _parentVault;
morphoVaultV1 = _morphoVaultV1;
adapterId = keccak256(abi.encode("this", address(this)));
address asset = IVaultV2(_parentVault).asset();
require(asset == IERC4626(_morphoVaultV1).asset(), AssetMismatch());
SafeERC20Lib.safeApprove(asset, _parentVault, type(uint256).max);
SafeERC20Lib.safeApprove(asset, _morphoVaultV1, type(uint256).max);
}
function setSkimRecipient(address newSkimRecipient) external {
require(msg.sender == IVaultV2(parentVault).owner(), NotAuthorized());
skimRecipient = newSkimRecipient;
emit SetSkimRecipient(newSkimRecipient);
}
/// @dev Skims the adapter's balance of `token` and sends it to `skimRecipient`.
/// @dev This is useful to handle rewards that the adapter has earned.
function skim(address token) external {
require(msg.sender == skimRecipient, NotAuthorized());
require(token != morphoVaultV1, CannotSkimMorphoVaultV1Shares());
uint256 balance = IERC20(token).balanceOf(address(this));
SafeERC20Lib.safeTransfer(token, skimRecipient, balance);
emit Skim(token, balance);
}
/// @dev Does not log anything because the ids (logged in the parent vault) are enough.
/// @dev Returns the ids of the allocation and the change in allocation.
function allocate(bytes memory data, uint256 assets, bytes4, address) external returns (bytes32[] memory, int256) {
require(data.length == 0, InvalidData());
require(msg.sender == parentVault, NotAuthorized());
if (assets > 0) IERC4626(morphoVaultV1).deposit(assets, address(this));
uint256 oldAllocation = allocation();
uint256 newAllocation = IERC4626(morphoVaultV1).previewRedeem(IERC4626(morphoVaultV1).balanceOf(address(this)));
// Safe casts because Market v1 bounds the total supply of the underlying token, and allocation is less than the
// max total assets of the vault.
return (ids(), int256(newAllocation) - int256(oldAllocation));
}
/// @dev Does not log anything because the ids (logged in the parent vault) are enough.
/// @dev Returns the ids of the deallocation and the change in allocation.
function deallocate(bytes memory data, uint256 assets, bytes4, address)
external
returns (bytes32[] memory, int256)
{
require(data.length == 0, InvalidData());
require(msg.sender == parentVault, NotAuthorized());
if (assets > 0) IERC4626(morphoVaultV1).withdraw(assets, address(this), address(this));
uint256 oldAllocation = allocation();
uint256 newAllocation = IERC4626(morphoVaultV1).previewRedeem(IERC4626(morphoVaultV1).balanceOf(address(this)));
// Safe casts because Market v1 bounds the total supply of the underlying token, and allocation is less than the
// max total assets of the vault.
return (ids(), int256(newAllocation) - int256(oldAllocation));
}
/// @dev Returns adapter's ids.
function ids() public view returns (bytes32[] memory) {
bytes32[] memory ids_ = new bytes32[](1);
ids_[0] = adapterId;
return ids_;
}
function allocation() public view returns (uint256) {
return IVaultV2(parentVault).allocation(adapterId);
}
function realAssets() external view returns (uint256) {
return allocation() != 0
? IERC4626(morphoVaultV1).previewRedeem(IERC4626(morphoVaultV1).balanceOf(address(this)))
: 0;
}
}// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity >=0.5.0;
interface IMorphoVaultV1AdapterFactory {
/* EVENTS */
event CreateMorphoVaultV1Adapter(
address indexed parentVault, address indexed morphoVaultV1, address indexed morphoVaultV1Adapter
);
/* FUNCTIONS */
function morphoVaultV1Adapter(address parentVault, address morphoVaultV1) external view returns (address);
function isMorphoVaultV1Adapter(address account) external view returns (bool);
function createMorphoVaultV1Adapter(address parentVault, address morphoVaultV1)
external
returns (address morphoVaultV1Adapter);
}// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity >=0.5.0;
import {IERC20} from "./IERC20.sol";
import {IERC4626} from "./IERC4626.sol";
import {IERC2612} from "./IERC2612.sol";
struct Caps {
uint256 allocation;
uint128 absoluteCap;
uint128 relativeCap;
}
interface IVaultV2 is IERC4626, IERC2612 {
// State variables
function virtualShares() external view returns (uint256);
function owner() external view returns (address);
function curator() external view returns (address);
function receiveSharesGate() external view returns (address);
function sendSharesGate() external view returns (address);
function receiveAssetsGate() external view returns (address);
function sendAssetsGate() external view returns (address);
function adapterRegistry() external view returns (address);
function isSentinel(address account) external view returns (bool);
function isAllocator(address account) external view returns (bool);
function firstTotalAssets() external view returns (uint256);
function _totalAssets() external view returns (uint128);
function lastUpdate() external view returns (uint64);
function maxRate() external view returns (uint64);
function adapters(uint256 index) external view returns (address);
function adaptersLength() external view returns (uint256);
function isAdapter(address account) external view returns (bool);
function allocation(bytes32 id) external view returns (uint256);
function absoluteCap(bytes32 id) external view returns (uint256);
function relativeCap(bytes32 id) external view returns (uint256);
function forceDeallocatePenalty(address adapter) external view returns (uint256);
function liquidityAdapter() external view returns (address);
function liquidityData() external view returns (bytes memory);
function timelock(bytes4 selector) external view returns (uint256);
function abdicated(bytes4 selector) external view returns (bool);
function executableAt(bytes memory data) external view returns (uint256);
function performanceFee() external view returns (uint96);
function performanceFeeRecipient() external view returns (address);
function managementFee() external view returns (uint96);
function managementFeeRecipient() external view returns (address);
// Gating
function canSendShares(address account) external view returns (bool);
function canReceiveShares(address account) external view returns (bool);
function canSendAssets(address account) external view returns (bool);
function canReceiveAssets(address account) external view returns (bool);
// Multicall
function multicall(bytes[] memory data) external;
// Owner functions
function setOwner(address newOwner) external;
function setCurator(address newCurator) external;
function setIsSentinel(address account, bool isSentinel) external;
function setName(string memory newName) external;
function setSymbol(string memory newSymbol) external;
// Timelocks for curator functions
function submit(bytes memory data) external;
function revoke(bytes memory data) external;
// Curator functions
function setIsAllocator(address account, bool newIsAllocator) external;
function setReceiveSharesGate(address newReceiveSharesGate) external;
function setSendSharesGate(address newSendSharesGate) external;
function setReceiveAssetsGate(address newReceiveAssetsGate) external;
function setSendAssetsGate(address newSendAssetsGate) external;
function setAdapterRegistry(address newAdapterRegistry) external;
function addAdapter(address account) external;
function removeAdapter(address account) external;
function increaseTimelock(bytes4 selector, uint256 newDuration) external;
function decreaseTimelock(bytes4 selector, uint256 newDuration) external;
function abdicate(bytes4 selector) external;
function setPerformanceFee(uint256 newPerformanceFee) external;
function setManagementFee(uint256 newManagementFee) external;
function setPerformanceFeeRecipient(address newPerformanceFeeRecipient) external;
function setManagementFeeRecipient(address newManagementFeeRecipient) external;
function increaseAbsoluteCap(bytes memory idData, uint256 newAbsoluteCap) external;
function decreaseAbsoluteCap(bytes memory idData, uint256 newAbsoluteCap) external;
function increaseRelativeCap(bytes memory idData, uint256 newRelativeCap) external;
function decreaseRelativeCap(bytes memory idData, uint256 newRelativeCap) external;
function setMaxRate(uint256 newMaxRate) external;
function setForceDeallocatePenalty(address adapter, uint256 newForceDeallocatePenalty) external;
// Allocator functions
function allocate(address adapter, bytes memory data, uint256 assets) external;
function deallocate(address adapter, bytes memory data, uint256 assets) external;
function setLiquidityAdapterAndData(address newLiquidityAdapter, bytes memory newLiquidityData) external;
// Exchange rate
function accrueInterest() external;
function accrueInterestView()
external
view
returns (uint256 newTotalAssets, uint256 performanceFeeShares, uint256 managementFeeShares);
// Force deallocate
function forceDeallocate(address adapter, bytes memory data, uint256 assets, address onBehalf)
external
returns (uint256 penaltyShares);
}// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity >=0.5.0;
import {IERC20} from "./IERC20.sol";
interface IERC4626 is IERC20 {
function asset() external view returns (address);
function totalAssets() external view returns (uint256);
function convertToAssets(uint256 shares) external view returns (uint256 assets);
function convertToShares(uint256 assets) external view returns (uint256 shares);
function deposit(uint256 assets, address onBehalf) external returns (uint256 shares);
function mint(uint256 shares, address onBehalf) external returns (uint256 assets);
function withdraw(uint256 assets, address onBehalf, address receiver) external returns (uint256 shares);
function redeem(uint256 shares, address onBehalf, address receiver) external returns (uint256 assets);
function previewDeposit(uint256 assets) external view returns (uint256 shares);
function previewMint(uint256 shares) external view returns (uint256 assets);
function previewWithdraw(uint256 assets) external view returns (uint256 shares);
function previewRedeem(uint256 shares) external view returns (uint256 assets);
function maxDeposit(address onBehalf) external view returns (uint256 assets);
function maxMint(address onBehalf) external view returns (uint256 shares);
function maxWithdraw(address onBehalf) external view returns (uint256 assets);
function maxRedeem(address onBehalf) external view returns (uint256 shares);
}// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity >=0.5.0;
interface IERC20 {
function decimals() external view returns (uint8);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 shares) external returns (bool success);
function transferFrom(address from, address to, uint256 shares) external returns (bool success);
function approve(address spender, uint256 shares) external returns (bool success);
function allowance(address owner, address spender) external view returns (uint256);
}// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity >= 0.5.0;
import {IAdapter} from "../../interfaces/IAdapter.sol";
interface IMorphoVaultV1Adapter is IAdapter {
/* EVENTS */
event SetSkimRecipient(address indexed newSkimRecipient);
event Skim(address indexed token, uint256 assets);
/* ERRORS */
error AssetMismatch();
error CannotSkimMorphoVaultV1Shares();
error InvalidData();
error NotAuthorized();
/* FUNCTIONS */
function factory() external view returns (address);
function parentVault() external view returns (address);
function morphoVaultV1() external view returns (address);
function adapterId() external view returns (bytes32);
function skimRecipient() external view returns (address);
function allocation() external view returns (uint256);
function ids() external view returns (bytes32[] memory);
function setSkimRecipient(address newSkimRecipient) external;
function skim(address token) external;
}// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity ^0.8.0;
import {IERC20} from "../interfaces/IERC20.sol";
import {ErrorsLib} from "./ErrorsLib.sol";
library SafeERC20Lib {
function safeTransfer(address token, address to, uint256 value) internal {
require(token.code.length > 0, ErrorsLib.NoCode());
(bool success, bytes memory returndata) = token.call(abi.encodeCall(IERC20.transfer, (to, value)));
require(success, ErrorsLib.TransferReverted());
require(returndata.length == 0 || abi.decode(returndata, (bool)), ErrorsLib.TransferReturnedFalse());
}
function safeTransferFrom(address token, address from, address to, uint256 value) internal {
require(token.code.length > 0, ErrorsLib.NoCode());
(bool success, bytes memory returndata) = token.call(abi.encodeCall(IERC20.transferFrom, (from, to, value)));
require(success, ErrorsLib.TransferFromReverted());
require(returndata.length == 0 || abi.decode(returndata, (bool)), ErrorsLib.TransferFromReturnedFalse());
}
function safeApprove(address token, address spender, uint256 value) internal {
require(token.code.length > 0, ErrorsLib.NoCode());
(bool success, bytes memory returndata) = token.call(abi.encodeCall(IERC20.approve, (spender, value)));
require(success, ErrorsLib.ApproveReverted());
require(returndata.length == 0 || abi.decode(returndata, (bool)), ErrorsLib.ApproveReturnedFalse());
}
}// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity >=0.5.0;
interface IERC2612 {
function permit(address owner, address spender, uint256 shares, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
external;
function nonces(address owner) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
}// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity >=0.5.0;
/// @dev See VaultV2 NatSpec comments for more details on adapter's spec.
interface IAdapter {
/// @dev Returns the market' ids and the change in assets on this market.
function allocate(bytes memory data, uint256 assets, bytes4 selector, address sender)
external
returns (bytes32[] memory ids, int256 change);
/// @dev Returns the market' ids and the change in assets on this market.
function deallocate(bytes memory data, uint256 assets, bytes4 selector, address sender)
external
returns (bytes32[] memory ids, int256 change);
/// @dev Returns the current value of the investments of the adapter (in underlying asset).
function realAssets() external view returns (uint256 assets);
}// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2025 Morpho Association
pragma solidity ^0.8.0;
library ErrorsLib {
error Abdicated();
error AbsoluteCapExceeded();
error AbsoluteCapNotDecreasing();
error AbsoluteCapNotIncreasing();
error ApproveReturnedFalse();
error ApproveReverted();
error CannotReceiveShares();
error CannotReceiveAssets();
error CannotSendShares();
error CannotSendAssets();
error CapExceeded();
error CastOverflow();
error DataAlreadyPending();
error DataNotTimelocked();
error FeeInvariantBroken();
error FeeTooHigh();
error InvalidSigner();
error MaxRateTooHigh();
error NoCode();
error NotAdapter();
error NotInAdapterRegistry();
error PenaltyTooHigh();
error PermitDeadlineExpired();
error RelativeCapAboveOne();
error RelativeCapExceeded();
error RelativeCapNotDecreasing();
error RelativeCapNotIncreasing();
error AutomaticallyTimelocked();
error TimelockNotDecreasing();
error TimelockNotExpired();
error TimelockNotIncreasing();
error TransferFromReturnedFalse();
error TransferFromReverted();
error TransferReturnedFalse();
error TransferReverted();
error Unauthorized();
error ZeroAbsoluteCap();
error ZeroAddress();
error ZeroAllocation();
}{
"remappings": [
"solmate/=lib/bundler3/lib/permit2/lib/solmate/",
"@openzeppelin/contracts/=lib/metamorpho-1.1/lib/openzeppelin-contracts/contracts/",
"bundler3/=lib/bundler3/",
"ds-test/=lib/metamorpho-1.1/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/metamorpho-1.1/lib/erc4626-tests/",
"forge-gas-snapshot/=lib/bundler3/lib/permit2/lib/forge-gas-snapshot/src/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/morpho-blue/lib/halmos-cheatcodes/src/",
"metamorpho-1.1/=lib/metamorpho-1.1/",
"metamorpho-v1.1/=lib/vault-v2/lib/metamorpho-v1.1/",
"metamorpho/=lib/vault-v2/lib/metamorpho/",
"morpho-blue-irm/=lib/morpho-blue-irm/src/",
"morpho-blue-oracles/=lib/morpho-blue-oracles/src/",
"morpho-blue/=lib/morpho-blue/",
"murky/=lib/universal-rewards-distributor/lib/murky/src/",
"openzeppelin-contracts/=lib/metamorpho-1.1/lib/openzeppelin-contracts/",
"openzeppelin/=lib/universal-rewards-distributor/lib/openzeppelin-contracts/contracts/",
"permit2/=lib/bundler3/lib/permit2/",
"pre-liquidation/=lib/pre-liquidation/src/",
"public-allocator/=lib/public-allocator/src/",
"safe-smart-account/=lib/safe-smart-account/",
"universal-rewards-distributor/=lib/universal-rewards-distributor/src/",
"vault-v2-adapter-registries/=lib/vault-v2-adapter-registries/src/",
"vault-v2/=lib/vault-v2/"
],
"optimizer": {
"enabled": true,
"runs": 100000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "none",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": true
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"parentVault","type":"address"},{"indexed":true,"internalType":"address","name":"morphoVaultV1","type":"address"},{"indexed":true,"internalType":"address","name":"morphoVaultV1Adapter","type":"address"}],"name":"CreateMorphoVaultV1Adapter","type":"event"},{"inputs":[{"internalType":"address","name":"parentVault","type":"address"},{"internalType":"address","name":"morphoVaultV1","type":"address"}],"name":"createMorphoVaultV1Adapter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMorphoVaultV1Adapter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"parentVault","type":"address"},{"internalType":"address","name":"morphoVaultV1","type":"address"}],"name":"morphoVaultV1Adapter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080806040523460155761168f908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081632c7756651461026757508063760c79d2146101c65763e9752c691461003d575f80fd5b346101c25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c2576100746102cb565b61007c6102ee565b604051611371908181019381851067ffffffffffffffff861117610195578173ffffffffffffffffffffffffffffffffffffffff806040935f9661031285391695868852169586602082015203019082f591821561018a5773ffffffffffffffffffffffffffffffffffffffff602093168091835f525f855260405f20815f52855260405f20827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f526001855260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055604051937f2621b71f5d8a3bc363b4162b5e19dcabcba43cfefb95daeda63ba18a54572bc65f80a48152f35b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80fd5b346101c25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c2576101fd6102cb565b73ffffffffffffffffffffffffffffffffffffffff61021a6102ee565b91165f525f60205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346101c25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c25760209073ffffffffffffffffffffffffffffffffffffffff6102b66102cb565b165f526001825260ff60405f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101c257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101c25756fe61010080604052346101c85760408161137180380380916100208285610219565b8339810103126101c85761003f602061003883610250565b9201610250565b336080528160a0528060c05260405160208101906040825260046060820152637468697360e01b60808201523060408201526080815261008060a082610219565b51902060e0526040516338d52e0f60e01b81526020816004816001600160a01b0387165afa9081156101d4575f916101df575b506040516338d52e0f60e01b81526020816004816001600160a01b0387165afa9081156101d4575f91610196575b506001600160a01b0390811690821603610187576101026101079382610264565b610264565b60405161101b90816103568239608051816101ad015260a0518181816106ee01528181610a1201528181610b5301528181610c640152610f37015260c05181818161013f01528181610256015281816105a10152818161073a015281816108c40152610bd7015260e05181818161052c01528181610ef60152610fbd0152f35b6341e0808560e11b5f5260045ffd5b90506020813d6020116101cc575b816101b160209383610219565b810103126101c8576101c290610250565b5f6100e1565b5f80fd5b3d91506101a4565b6040513d5f823e3d90fd5b90506020813d602011610211575b816101fa60209383610219565b810103126101c85761020b90610250565b5f6100b3565b3d91506101ed565b601f909101601f19168101906001600160401b0382119082101761023c57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101c857565b90813b15610346575f91829182604051602081019263095ea7b360e01b845260018060a01b0316602482015281196044820152604481526102a6606482610219565b51925af13d1561033e573d906001600160401b03821161023c57604051916102d8601f8201601f191660200184610219565b82523d5f602084013e5b1561032f57805190811591821561030c575b5050156102fd57565b631f55ddd960e21b5f5260045ffd5b81925090602091810103126101c8576020015180151581036101c8575f806102f4565b637cceae2560e01b5f5260045ffd5b6060906102e2565b633c11a9c560e21b5f5260045ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630fe3653614610c1c575080631eadd77814610b265780632b30997b14610998578063388af5b5146109485780634e45f1ff146106c157806356c075731461054f5780635fb86b01146104f757806388a17bde146104b7578063bc25cf77146101d1578063c45a015514610163578063e4baaddf146100f55763e7657e15146100a0575f80fd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f1576100ed6100d9610f99565b604051918291602083526020830190610e2b565b0390f35b5f80fd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100f15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157610208610d30565b73ffffffffffffffffffffffffffffffffffffffff5f541680330361048f5773ffffffffffffffffffffffffffffffffffffffff82169173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016831461046757604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481875afa92831561045c575f93610428575b50813b15610400575f9182918260405160208101927fa9059cbb000000000000000000000000000000000000000000000000000000008452602482015286604482015260448152610312606482610c88565b51925af13d156103f8573d9061032782610cf6565b916103356040519384610c88565b82523d5f602084013e5b156103d05780519081159182156103ad575b5050156103855760207f5e99aaf6d3588fb2497fde044168e8c046704a3223559cfe107f8f94b42cefdd91604051908152a2005b7f2f0470fc000000000000000000000000000000000000000000000000000000005f5260045ffd5b81925090602091810103126100f1576020015180151581036100f1578380610351565b7face2a47e000000000000000000000000000000000000000000000000000000005f5260045ffd5b60609061033f565b7ff046a714000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d602011610454575b8161044460209383610c88565b810103126100f1575191846102c0565b3d9150610437565b6040513d5f823e3d90fd5b7fd60904b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fea8e4eb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760206104ef610ece565b604051908152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157610585610ece565b156106b95773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa801561045c575f90610686575b602091506024604051809481937f4cdad50600000000000000000000000000000000000000000000000000000000835260048301525afa801561045c575f90610653575b60209150604051908152f35b506020813d60201161067e575b8161066d60209383610c88565b810103126100f15760209051610647565b3d9150610660565b506020813d6020116106b1575b816106a060209383610c88565b810103126100f15760209051610603565b3d9150610693565b60205f6104ef565b346100f1576106cf36610d53565b505090516109205773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361048f578061086e575b50610723610ece565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481865afa801561045c575f9061083b575b602091506024604051809581937f4cdad50600000000000000000000000000000000000000000000000000000000835260048301525afa91821561045c575f92610805575b506107f5906107ef610f99565b92610e89565b906100ed60405192839283610e5e565b9091506020813d602011610833575b8161082160209383610c88565b810103126100f15751906107f56107e2565b3d9150610814565b506020813d602011610866575b8161085560209383610c88565b810103126100f1576020905161079d565b3d9150610848565b604051907fb460af9400000000000000000000000000000000000000000000000000000000825260048201523060248201523060448201526020816064815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561045c571561071a576109129060203d602011610919575b61090a8183610c88565b810190610e7a565b508061071a565b503d610900565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100f15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f1576109cf610d30565b6040517f8da5cb5b00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561045c575f90610ac3575b73ffffffffffffffffffffffffffffffffffffffff915016330361048f5773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f2e7908865670e21b9779422cadf5f1cba271a62bb95c71eaaf615c0a1c48ebee5f80a2005b506020813d602011610b1e575b81610add60209383610c88565b810103126100f1575173ffffffffffffffffffffffffffffffffffffffff811681036100f15773ffffffffffffffffffffffffffffffffffffffff90610a41565b3d9150610ad0565b346100f157610b3436610d53565b505090516109205773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361048f5780610b875750610723610ece565b604051907f6e553f6500000000000000000000000000000000000000000000000000000000825260048201523060248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561045c571561071a576109129060203d6020116109195761090a8183610c88565b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cc957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610cc957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100f157565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100f15760043567ffffffffffffffff81116100f157816023820112156100f157806004013590610da982610cf6565b92610db76040519485610c88565b828452602483830101116100f157815f92602460209301838601378301015290602435906044357fffffffff00000000000000000000000000000000000000000000000000000000811681036100f1579060643573ffffffffffffffffffffffffffffffffffffffff811681036100f15790565b90602080835192838152019201905f5b818110610e485750505090565b8251845260209384019390920191600101610e3b565b929190610e75602091604086526040860190610e2b565b930152565b908160209103126100f1575190565b81810392915f138015828513169184121617610ea157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6040517fc69507dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561045c575f91610f6a575090565b90506020813d602011610f91575b81610f8560209383610c88565b810103126100f1575190565b3d9150610f78565b604051610fa7604082610c88565b60018152602080820190368237815115610fe1577f0000000000000000000000000000000000000000000000000000000000000000905290565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea164736f6c634300081c000aa164736f6c634300081c000a
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f3560e01c9081632c7756651461026757508063760c79d2146101c65763e9752c691461003d575f80fd5b346101c25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c2576100746102cb565b61007c6102ee565b604051611371908181019381851067ffffffffffffffff861117610195578173ffffffffffffffffffffffffffffffffffffffff806040935f9661031285391695868852169586602082015203019082f591821561018a5773ffffffffffffffffffffffffffffffffffffffff602093168091835f525f855260405f20815f52855260405f20827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f526001855260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055604051937f2621b71f5d8a3bc363b4162b5e19dcabcba43cfefb95daeda63ba18a54572bc65f80a48152f35b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80fd5b346101c25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c2576101fd6102cb565b73ffffffffffffffffffffffffffffffffffffffff61021a6102ee565b91165f525f60205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346101c25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c25760209073ffffffffffffffffffffffffffffffffffffffff6102b66102cb565b165f526001825260ff60405f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101c257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101c25756fe61010080604052346101c85760408161137180380380916100208285610219565b8339810103126101c85761003f602061003883610250565b9201610250565b336080528160a0528060c05260405160208101906040825260046060820152637468697360e01b60808201523060408201526080815261008060a082610219565b51902060e0526040516338d52e0f60e01b81526020816004816001600160a01b0387165afa9081156101d4575f916101df575b506040516338d52e0f60e01b81526020816004816001600160a01b0387165afa9081156101d4575f91610196575b506001600160a01b0390811690821603610187576101026101079382610264565b610264565b60405161101b90816103568239608051816101ad015260a0518181816106ee01528181610a1201528181610b5301528181610c640152610f37015260c05181818161013f01528181610256015281816105a10152818161073a015281816108c40152610bd7015260e05181818161052c01528181610ef60152610fbd0152f35b6341e0808560e11b5f5260045ffd5b90506020813d6020116101cc575b816101b160209383610219565b810103126101c8576101c290610250565b5f6100e1565b5f80fd5b3d91506101a4565b6040513d5f823e3d90fd5b90506020813d602011610211575b816101fa60209383610219565b810103126101c85761020b90610250565b5f6100b3565b3d91506101ed565b601f909101601f19168101906001600160401b0382119082101761023c57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101c857565b90813b15610346575f91829182604051602081019263095ea7b360e01b845260018060a01b0316602482015281196044820152604481526102a6606482610219565b51925af13d1561033e573d906001600160401b03821161023c57604051916102d8601f8201601f191660200184610219565b82523d5f602084013e5b1561032f57805190811591821561030c575b5050156102fd57565b631f55ddd960e21b5f5260045ffd5b81925090602091810103126101c8576020015180151581036101c8575f806102f4565b637cceae2560e01b5f5260045ffd5b6060906102e2565b633c11a9c560e21b5f5260045ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630fe3653614610c1c575080631eadd77814610b265780632b30997b14610998578063388af5b5146109485780634e45f1ff146106c157806356c075731461054f5780635fb86b01146104f757806388a17bde146104b7578063bc25cf77146101d1578063c45a015514610163578063e4baaddf146100f55763e7657e15146100a0575f80fd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f1576100ed6100d9610f99565b604051918291602083526020830190610e2b565b0390f35b5f80fd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100f15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157610208610d30565b73ffffffffffffffffffffffffffffffffffffffff5f541680330361048f5773ffffffffffffffffffffffffffffffffffffffff82169173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016831461046757604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481875afa92831561045c575f93610428575b50813b15610400575f9182918260405160208101927fa9059cbb000000000000000000000000000000000000000000000000000000008452602482015286604482015260448152610312606482610c88565b51925af13d156103f8573d9061032782610cf6565b916103356040519384610c88565b82523d5f602084013e5b156103d05780519081159182156103ad575b5050156103855760207f5e99aaf6d3588fb2497fde044168e8c046704a3223559cfe107f8f94b42cefdd91604051908152a2005b7f2f0470fc000000000000000000000000000000000000000000000000000000005f5260045ffd5b81925090602091810103126100f1576020015180151581036100f1578380610351565b7face2a47e000000000000000000000000000000000000000000000000000000005f5260045ffd5b60609061033f565b7ff046a714000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d602011610454575b8161044460209383610c88565b810103126100f1575191846102c0565b3d9150610437565b6040513d5f823e3d90fd5b7fd60904b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fea8e4eb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760206104ef610ece565b604051908152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157610585610ece565b156106b95773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa801561045c575f90610686575b602091506024604051809481937f4cdad50600000000000000000000000000000000000000000000000000000000835260048301525afa801561045c575f90610653575b60209150604051908152f35b506020813d60201161067e575b8161066d60209383610c88565b810103126100f15760209051610647565b3d9150610660565b506020813d6020116106b1575b816106a060209383610c88565b810103126100f15760209051610603565b3d9150610693565b60205f6104ef565b346100f1576106cf36610d53565b505090516109205773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361048f578061086e575b50610723610ece565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481865afa801561045c575f9061083b575b602091506024604051809581937f4cdad50600000000000000000000000000000000000000000000000000000000835260048301525afa91821561045c575f92610805575b506107f5906107ef610f99565b92610e89565b906100ed60405192839283610e5e565b9091506020813d602011610833575b8161082160209383610c88565b810103126100f15751906107f56107e2565b3d9150610814565b506020813d602011610866575b8161085560209383610c88565b810103126100f1576020905161079d565b3d9150610848565b604051907fb460af9400000000000000000000000000000000000000000000000000000000825260048201523060248201523060448201526020816064815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561045c571561071a576109129060203d602011610919575b61090a8183610c88565b810190610e7a565b508061071a565b503d610900565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100f15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f1576109cf610d30565b6040517f8da5cb5b00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561045c575f90610ac3575b73ffffffffffffffffffffffffffffffffffffffff915016330361048f5773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f2e7908865670e21b9779422cadf5f1cba271a62bb95c71eaaf615c0a1c48ebee5f80a2005b506020813d602011610b1e575b81610add60209383610c88565b810103126100f1575173ffffffffffffffffffffffffffffffffffffffff811681036100f15773ffffffffffffffffffffffffffffffffffffffff90610a41565b3d9150610ad0565b346100f157610b3436610d53565b505090516109205773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361048f5780610b875750610723610ece565b604051907f6e553f6500000000000000000000000000000000000000000000000000000000825260048201523060248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561045c571561071a576109129060203d6020116109195761090a8183610c88565b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cc957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610cc957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100f157565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100f15760043567ffffffffffffffff81116100f157816023820112156100f157806004013590610da982610cf6565b92610db76040519485610c88565b828452602483830101116100f157815f92602460209301838601378301015290602435906044357fffffffff00000000000000000000000000000000000000000000000000000000811681036100f1579060643573ffffffffffffffffffffffffffffffffffffffff811681036100f15790565b90602080835192838152019201905f5b818110610e485750505090565b8251845260209384019390920191600101610e3b565b929190610e75602091604086526040860190610e2b565b930152565b908160209103126100f1575190565b81810392915f138015828513169184121617610ea157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6040517fc69507dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561045c575f91610f6a575090565b90506020813d602011610f91575b81610f8560209383610c88565b810103126100f1575190565b3d9150610f78565b604051610fa7604082610c88565b60018152602080820190368237815115610fe1577f0000000000000000000000000000000000000000000000000000000000000000905290565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea164736f6c634300081c000aa164736f6c634300081c000a
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.