Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13096853 | 34 hrs ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RegistryList
Compiler Version
v0.8.28+commit.7893614a
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 // Copyright (c) 2025 Morpho Association pragma solidity 0.8.28; import "./interfaces/IRegistryList.sol"; contract RegistryList is IRegistryList { address public owner; /// @dev Owner controlled append-only list of registries. /// @dev This registry is effectively "add-only" only if all sub-registries are also "add-only". address[] public subRegistries; event Constructor(address indexed owner); event SetOwner(address indexed newOwner); event AddSubRegistry(address indexed subRegistry); function subRegistriesLength() external view returns (uint256) { return subRegistries.length; } constructor() { owner = msg.sender; emit Constructor(msg.sender); } function setOwner(address newOwner) external { require(msg.sender == owner, "Not owner"); owner = newOwner; emit SetOwner(newOwner); } /// @dev Adding a subRegistry that reverts or makes looping too gas consuming will make new registries uneffective /// (vaults will not be able to validate adapters that would be validated by registries that have been added after). function addSubRegistry(address subRegistry) external { require(msg.sender == owner, "Not owner"); subRegistries.push(subRegistry); emit AddSubRegistry(subRegistry); } function isInRegistry(address adapter) public view returns (bool) { for (uint256 i = 0; i < subRegistries.length; i++) { if (IAdapterRegistry(subRegistries[i]).isInRegistry(adapter)) return true; } return false; } }
// SPDX-License-Identifier: GPL-2.0-or-later // Copyright (c) 2025 Morpho Association pragma solidity >=0.5.0; import "../../lib/vault-v2/src/interfaces/IAdapterRegistry.sol"; interface IRegistryList is IAdapterRegistry { function owner() external view returns (address); function subRegistries(uint256 index) external view returns (address); function subRegistriesLength() external view returns (uint256); function setOwner(address newOwner) external; function addSubRegistry(address subRegistry) external; }
// SPDX-License-Identifier: GPL-2.0-or-later // Copyright (c) 2025 Morpho Association pragma solidity >=0.5.0; interface IAdapterRegistry { function isInRegistry(address account) external view returns (bool); }
{ "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": 999999 }, "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":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"subRegistry","type":"address"}],"name":"AddSubRegistry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"Constructor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"SetOwner","type":"event"},{"inputs":[{"internalType":"address","name":"subRegistry","type":"address"}],"name":"addSubRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adapter","type":"address"}],"name":"isInRegistry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"subRegistries","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"subRegistriesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60808060405234604d575f80546001600160a01b031916339081178255907f385bc760a35ad4b8b2c11c6a4c6d27daa5e72ce47836b34da36a3f1258ec45ec9080a261056190816100528239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630da7173e1461027957806313af4035146101ba578063542873411461014e5780637041c2a8146101135780638da5cb5b146100c35763e4bb26f21461005b575f80fd5b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff811681036100bf576100b5602091610432565b6040519015158152f35b5f80fd5b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576020600154604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576004356001548110156100bf5773ffffffffffffffffffffffffffffffffffffffff6101aa602092610388565b90549060031b1c16604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf57807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5461024f73ffffffffffffffffffffffffffffffffffffffff821633146103cd565b16175f557f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb55f80a2005b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf576102eb73ffffffffffffffffffffffffffffffffffffffff5f541633146103cd565b6001546801000000000000000081101561035b5780600161030f9201600155610388565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff84831b921b19161790557f4c5de04e0a9fb984302e76e361d50aa774fb7922dcfdc4ad004ad087ccfec9415f80a2005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6001548110156103a05760015f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b156103d457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b600154905f5b828110610446575050505f90565b6024602073ffffffffffffffffffffffffffffffffffffffff61046884610388565b90549060031b1c16604051928380927fe4bb26f200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff881660048301525afa908115610549575f916104db575b506104d357600101610438565b505050600190565b905060203d8111610542575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761035b576020918391604052810103126100bf575180151581036100bf575f6104c6565b503d6104e7565b6040513d5f823e3d90fdfea164736f6c634300081c000a
Deployed Bytecode
0x60806040526004361015610011575f80fd5b5f3560e01c80630da7173e1461027957806313af4035146101ba578063542873411461014e5780637041c2a8146101135780638da5cb5b146100c35763e4bb26f21461005b575f80fd5b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff811681036100bf576100b5602091610432565b6040519015158152f35b5f80fd5b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576020600154604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576004356001548110156100bf5773ffffffffffffffffffffffffffffffffffffffff6101aa602092610388565b90549060031b1c16604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf57807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5461024f73ffffffffffffffffffffffffffffffffffffffff821633146103cd565b16175f557f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb55f80a2005b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf576102eb73ffffffffffffffffffffffffffffffffffffffff5f541633146103cd565b6001546801000000000000000081101561035b5780600161030f9201600155610388565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff84831b921b19161790557f4c5de04e0a9fb984302e76e361d50aa774fb7922dcfdc4ad004ad087ccfec9415f80a2005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6001548110156103a05760015f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b156103d457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b600154905f5b828110610446575050505f90565b6024602073ffffffffffffffffffffffffffffffffffffffff61046884610388565b90549060031b1c16604051928380927fe4bb26f200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff881660048301525afa908115610549575f916104db575b506104d357600101610438565b505050600190565b905060203d8111610542575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761035b576020918391604052810103126100bf575180151581036100bf575f6104c6565b503d6104e7565b6040513d5f823e3d90fdfea164736f6c634300081c000a
Loading...
Loading
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.