Source Code
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 17440628 | 9 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x5BD5d9Aa...08c6f3400 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
MorphoVaultV1Adapter
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 100000 runs
Other Settings:
cancun EvmVersion
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 {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;
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[{"inputs":[{"internalType":"address","name":"_parentVault","type":"address"},{"internalType":"address","name":"_morphoVaultV1","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApproveReturnedFalse","type":"error"},{"inputs":[],"name":"ApproveReverted","type":"error"},{"inputs":[],"name":"AssetMismatch","type":"error"},{"inputs":[],"name":"CannotSkimMorphoVaultV1Shares","type":"error"},{"inputs":[],"name":"InvalidData","type":"error"},{"inputs":[],"name":"NoCode","type":"error"},{"inputs":[],"name":"NotAuthorized","type":"error"},{"inputs":[],"name":"TransferReturnedFalse","type":"error"},{"inputs":[],"name":"TransferReverted","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newSkimRecipient","type":"address"}],"name":"SetSkimRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"}],"name":"Skim","type":"event"},{"inputs":[],"name":"adapterId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"address","name":"","type":"address"}],"name":"allocate","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"},{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"address","name":"","type":"address"}],"name":"deallocate","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"},{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ids","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"morphoVaultV1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parentVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"realAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newSkimRecipient","type":"address"}],"name":"setSkimRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"skimRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
0x61010080604052346101c85760408161137180380380916100208285610219565b8339810103126101c85761003f602061003883610250565b9201610250565b336080528160a0528060c05260405160208101906040825260046060820152637468697360e01b60808201523060408201526080815261008060a082610219565b51902060e0526040516338d52e0f60e01b81526020816004816001600160a01b0387165afa9081156101d4575f916101df575b506040516338d52e0f60e01b81526020816004816001600160a01b0387165afa9081156101d4575f91610196575b506001600160a01b0390811690821603610187576101026101079382610264565b610264565b60405161101b90816103568239608051816101ad015260a0518181816106ee01528181610a1201528181610b5301528181610c640152610f37015260c05181818161013f01528181610256015281816105a10152818161073a015281816108c40152610bd7015260e05181818161052c01528181610ef60152610fbd0152f35b6341e0808560e11b5f5260045ffd5b90506020813d6020116101cc575b816101b160209383610219565b810103126101c8576101c290610250565b5f6100e1565b5f80fd5b3d91506101a4565b6040513d5f823e3d90fd5b90506020813d602011610211575b816101fa60209383610219565b810103126101c85761020b90610250565b5f6100b3565b3d91506101ed565b601f909101601f19168101906001600160401b0382119082101761023c57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101c857565b90813b15610346575f91829182604051602081019263095ea7b360e01b845260018060a01b0316602482015281196044820152604481526102a6606482610219565b51925af13d1561033e573d906001600160401b03821161023c57604051916102d8601f8201601f191660200184610219565b82523d5f602084013e5b1561032f57805190811591821561030c575b5050156102fd57565b631f55ddd960e21b5f5260045ffd5b81925090602091810103126101c8576020015180151581036101c8575f806102f4565b637cceae2560e01b5f5260045ffd5b6060906102e2565b633c11a9c560e21b5f5260045ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630fe3653614610c1c575080631eadd77814610b265780632b30997b14610998578063388af5b5146109485780634e45f1ff146106c157806356c075731461054f5780635fb86b01146104f757806388a17bde146104b7578063bc25cf77146101d1578063c45a015514610163578063e4baaddf146100f55763e7657e15146100a0575f80fd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f1576100ed6100d9610f99565b604051918291602083526020830190610e2b565b0390f35b5f80fd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100f15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157610208610d30565b73ffffffffffffffffffffffffffffffffffffffff5f541680330361048f5773ffffffffffffffffffffffffffffffffffffffff82169173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016831461046757604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481875afa92831561045c575f93610428575b50813b15610400575f9182918260405160208101927fa9059cbb000000000000000000000000000000000000000000000000000000008452602482015286604482015260448152610312606482610c88565b51925af13d156103f8573d9061032782610cf6565b916103356040519384610c88565b82523d5f602084013e5b156103d05780519081159182156103ad575b5050156103855760207f5e99aaf6d3588fb2497fde044168e8c046704a3223559cfe107f8f94b42cefdd91604051908152a2005b7f2f0470fc000000000000000000000000000000000000000000000000000000005f5260045ffd5b81925090602091810103126100f1576020015180151581036100f1578380610351565b7face2a47e000000000000000000000000000000000000000000000000000000005f5260045ffd5b60609061033f565b7ff046a714000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d602011610454575b8161044460209383610c88565b810103126100f1575191846102c0565b3d9150610437565b6040513d5f823e3d90fd5b7fd60904b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fea8e4eb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760206104ef610ece565b604051908152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157610585610ece565b156106b95773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa801561045c575f90610686575b602091506024604051809481937f4cdad50600000000000000000000000000000000000000000000000000000000835260048301525afa801561045c575f90610653575b60209150604051908152f35b506020813d60201161067e575b8161066d60209383610c88565b810103126100f15760209051610647565b3d9150610660565b506020813d6020116106b1575b816106a060209383610c88565b810103126100f15760209051610603565b3d9150610693565b60205f6104ef565b346100f1576106cf36610d53565b505090516109205773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361048f578061086e575b50610723610ece565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481865afa801561045c575f9061083b575b602091506024604051809581937f4cdad50600000000000000000000000000000000000000000000000000000000835260048301525afa91821561045c575f92610805575b506107f5906107ef610f99565b92610e89565b906100ed60405192839283610e5e565b9091506020813d602011610833575b8161082160209383610c88565b810103126100f15751906107f56107e2565b3d9150610814565b506020813d602011610866575b8161085560209383610c88565b810103126100f1576020905161079d565b3d9150610848565b604051907fb460af9400000000000000000000000000000000000000000000000000000000825260048201523060248201523060448201526020816064815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561045c571561071a576109129060203d602011610919575b61090a8183610c88565b810190610e7a565b508061071a565b503d610900565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100f15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f1576109cf610d30565b6040517f8da5cb5b00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561045c575f90610ac3575b73ffffffffffffffffffffffffffffffffffffffff915016330361048f5773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f2e7908865670e21b9779422cadf5f1cba271a62bb95c71eaaf615c0a1c48ebee5f80a2005b506020813d602011610b1e575b81610add60209383610c88565b810103126100f1575173ffffffffffffffffffffffffffffffffffffffff811681036100f15773ffffffffffffffffffffffffffffffffffffffff90610a41565b3d9150610ad0565b346100f157610b3436610d53565b505090516109205773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361048f5780610b875750610723610ece565b604051907f6e553f6500000000000000000000000000000000000000000000000000000000825260048201523060248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561045c571561071a576109129060203d6020116109195761090a8183610c88565b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cc957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610cc957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100f157565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100f15760043567ffffffffffffffff81116100f157816023820112156100f157806004013590610da982610cf6565b92610db76040519485610c88565b828452602483830101116100f157815f92602460209301838601378301015290602435906044357fffffffff00000000000000000000000000000000000000000000000000000000811681036100f1579060643573ffffffffffffffffffffffffffffffffffffffff811681036100f15790565b90602080835192838152019201905f5b818110610e485750505090565b8251845260209384019390920191600101610e3b565b929190610e75602091604086526040860190610e2b565b930152565b908160209103126100f1575190565b81810392915f138015828513169184121617610ea157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6040517fc69507dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561045c575f91610f6a575090565b90506020813d602011610f91575b81610f8560209383610c88565b810103126100f1575190565b3d9150610f78565b604051610fa7604082610c88565b60018152602080820190368237815115610fe1577f0000000000000000000000000000000000000000000000000000000000000000905290565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea164736f6c634300081c000a000000000000000000000000f71da79a6ed40f894e883874dce3f54b1493d9300000000000000000000000004fd2fddc8973077b95d614980fd298b120f3148b
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f3560e01c9081630fe3653614610c1c575080631eadd77814610b265780632b30997b14610998578063388af5b5146109485780634e45f1ff146106c157806356c075731461054f5780635fb86b01146104f757806388a17bde146104b7578063bc25cf77146101d1578063c45a015514610163578063e4baaddf146100f55763e7657e15146100a0575f80fd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f1576100ed6100d9610f99565b604051918291602083526020830190610e2b565b0390f35b5f80fd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004fd2fddc8973077b95d614980fd298b120f3148b168152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c8d22b1add3d176600e9952e7876e9249254caaf168152f35b346100f15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157610208610d30565b73ffffffffffffffffffffffffffffffffffffffff5f541680330361048f5773ffffffffffffffffffffffffffffffffffffffff82169173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004fd2fddc8973077b95d614980fd298b120f3148b16831461046757604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481875afa92831561045c575f93610428575b50813b15610400575f9182918260405160208101927fa9059cbb000000000000000000000000000000000000000000000000000000008452602482015286604482015260448152610312606482610c88565b51925af13d156103f8573d9061032782610cf6565b916103356040519384610c88565b82523d5f602084013e5b156103d05780519081159182156103ad575b5050156103855760207f5e99aaf6d3588fb2497fde044168e8c046704a3223559cfe107f8f94b42cefdd91604051908152a2005b7f2f0470fc000000000000000000000000000000000000000000000000000000005f5260045ffd5b81925090602091810103126100f1576020015180151581036100f1578380610351565b7face2a47e000000000000000000000000000000000000000000000000000000005f5260045ffd5b60609061033f565b7ff046a714000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d602011610454575b8161044460209383610c88565b810103126100f1575191846102c0565b3d9150610437565b6040513d5f823e3d90fd5b7fd60904b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fea8e4eb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760206104ef610ece565b604051908152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760206040517faee7fdf5c2e3e47386aeb678487cc2ff44d6a3d4bde7d78e5c9220890d7c487a8152f35b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157610585610ece565b156106b95773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004fd2fddc8973077b95d614980fd298b120f3148b166040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa801561045c575f90610686575b602091506024604051809481937f4cdad50600000000000000000000000000000000000000000000000000000000835260048301525afa801561045c575f90610653575b60209150604051908152f35b506020813d60201161067e575b8161066d60209383610c88565b810103126100f15760209051610647565b3d9150610660565b506020813d6020116106b1575b816106a060209383610c88565b810103126100f15760209051610603565b3d9150610693565b60205f6104ef565b346100f1576106cf36610d53565b505090516109205773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000f71da79a6ed40f894e883874dce3f54b1493d93016330361048f578061086e575b50610723610ece565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004fd2fddc8973077b95d614980fd298b120f3148b16906040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481865afa801561045c575f9061083b575b602091506024604051809581937f4cdad50600000000000000000000000000000000000000000000000000000000835260048301525afa91821561045c575f92610805575b506107f5906107ef610f99565b92610e89565b906100ed60405192839283610e5e565b9091506020813d602011610833575b8161082160209383610c88565b810103126100f15751906107f56107e2565b3d9150610814565b506020813d602011610866575b8161085560209383610c88565b810103126100f1576020905161079d565b3d9150610848565b604051907fb460af9400000000000000000000000000000000000000000000000000000000825260048201523060248201523060448201526020816064815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004fd2fddc8973077b95d614980fd298b120f3148b165af1801561045c571561071a576109129060203d602011610919575b61090a8183610c88565b810190610e7a565b508061071a565b503d610900565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f157602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100f15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f1576109cf610d30565b6040517f8da5cb5b00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000f71da79a6ed40f894e883874dce3f54b1493d930165afa801561045c575f90610ac3575b73ffffffffffffffffffffffffffffffffffffffff915016330361048f5773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f2e7908865670e21b9779422cadf5f1cba271a62bb95c71eaaf615c0a1c48ebee5f80a2005b506020813d602011610b1e575b81610add60209383610c88565b810103126100f1575173ffffffffffffffffffffffffffffffffffffffff811681036100f15773ffffffffffffffffffffffffffffffffffffffff90610a41565b3d9150610ad0565b346100f157610b3436610d53565b505090516109205773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000f71da79a6ed40f894e883874dce3f54b1493d93016330361048f5780610b875750610723610ece565b604051907f6e553f6500000000000000000000000000000000000000000000000000000000825260048201523060248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004fd2fddc8973077b95d614980fd298b120f3148b165af1801561045c571561071a576109129060203d6020116109195761090a8183610c88565b346100f1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f15760209073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000f71da79a6ed40f894e883874dce3f54b1493d930168152f35b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cc957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610cc957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100f157565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100f15760043567ffffffffffffffff81116100f157816023820112156100f157806004013590610da982610cf6565b92610db76040519485610c88565b828452602483830101116100f157815f92602460209301838601378301015290602435906044357fffffffff00000000000000000000000000000000000000000000000000000000811681036100f1579060643573ffffffffffffffffffffffffffffffffffffffff811681036100f15790565b90602080835192838152019201905f5b818110610e485750505090565b8251845260209384019390920191600101610e3b565b929190610e75602091604086526040860190610e2b565b930152565b908160209103126100f1575190565b81810392915f138015828513169184121617610ea157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6040517fc69507dd0000000000000000000000000000000000000000000000000000000081527faee7fdf5c2e3e47386aeb678487cc2ff44d6a3d4bde7d78e5c9220890d7c487a600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000f71da79a6ed40f894e883874dce3f54b1493d930165afa90811561045c575f91610f6a575090565b90506020813d602011610f91575b81610f8560209383610c88565b810103126100f1575190565b3d9150610f78565b604051610fa7604082610c88565b60018152602080820190368237815115610fe1577faee7fdf5c2e3e47386aeb678487cc2ff44d6a3d4bde7d78e5c9220890d7c487a905290565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea164736f6c634300081c000a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.