{"file_path":"lib/vault-v2-adapter-registries/src/RegistryList.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: GPL-2.0-or-later\n// Copyright (c) 2025 Morpho Association\npragma solidity 0.8.28;\n\nimport {IRegistryList} from \"./interfaces/IRegistryList.sol\";\nimport {IAdapterRegistry} from \"../lib/vault-v2/src/interfaces/IAdapterRegistry.sol\";\n\ncontract RegistryList is IRegistryList {\n    address public owner;\n\n    /// @dev Owner controlled append-only list of registries.\n    /// @dev This registry is effectively \"add-only\" only if all sub-registries are also \"add-only\".\n    address[] public subRegistries;\n\n    event Constructor(address indexed owner);\n    event SetOwner(address indexed newOwner);\n    event AddSubRegistry(address indexed subRegistry);\n\n    function subRegistriesLength() external view returns (uint256) {\n        return subRegistries.length;\n    }\n\n    constructor() {\n        owner = msg.sender;\n        emit Constructor(msg.sender);\n    }\n\n    function setOwner(address newOwner) external {\n        require(msg.sender == owner, \"Not owner\");\n        owner = newOwner;\n        emit SetOwner(newOwner);\n    }\n\n    /// @dev Adding a subRegistry that reverts or makes looping too gas consuming will make new registries uneffective\n    /// (vaults will not be able to validate adapters that would be validated by registries that have been added after).\n    function addSubRegistry(address subRegistry) external {\n        require(msg.sender == owner, \"Not owner\");\n        subRegistries.push(subRegistry);\n        emit AddSubRegistry(subRegistry);\n    }\n\n    function isInRegistry(address adapter) public view returns (bool) {\n        for (uint256 i = 0; i < subRegistries.length; i++) {\n            if (IAdapterRegistry(subRegistries[i]).isInRegistry(adapter)) return true;\n        }\n        return false;\n    }\n}\n","deployed_bytecode":"0x60806040526004361015610011575f80fd5b5f3560e01c80630da7173e1461027957806313af4035146101ba578063542873411461014e5780637041c2a8146101135780638da5cb5b146100c35763e4bb26f21461005b575f80fd5b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff811681036100bf576100b5602091610432565b6040519015158152f35b5f80fd5b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576020600154604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576004356001548110156100bf5773ffffffffffffffffffffffffffffffffffffffff6101aa602092610388565b90549060031b1c16604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf57807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5461024f73ffffffffffffffffffffffffffffffffffffffff821633146103cd565b16175f557f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb55f80a2005b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf576102eb73ffffffffffffffffffffffffffffffffffffffff5f541633146103cd565b6001546801000000000000000081101561035b5780600161030f9201600155610388565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff84831b921b19161790557f4c5de04e0a9fb984302e76e361d50aa774fb7922dcfdc4ad004ad087ccfec9415f80a2005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6001548110156103a05760015f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b156103d457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b600154905f5b828110610446575050505f90565b6024602073ffffffffffffffffffffffffffffffffffffffff61046884610388565b90549060031b1c16604051928380927fe4bb26f200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff881660048301525afa908115610549575f916104db575b506104d357600101610438565b505050600190565b905060203d8111610542575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761035b576020918391604052810103126100bf575180151581036100bf575f6104c6565b503d6104e7565b6040513d5f823e3d90fdfea164736f6c634300081c000a","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"cancun","libraries":{},"metadata":{"appendCBOR":true,"bytecodeHash":"none","useLiteralContent":false},"optimizer":{"enabled":true,"runs":999999},"outputSelection":{"*":{"":["*"],"*":["*"]}},"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/"],"viaIR":true},"optimization_runs":999999,"sourcify_repo_url":null,"decoded_constructor_args":null,"compiler_version":"v0.8.28+commit.7893614a","is_verified_via_verifier_alliance":false,"verified_at":"2026-02-03T01:16:50.024446Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x60808060405234604d575f80546001600160a01b031916339081178255907f385bc760a35ad4b8b2c11c6a4c6d27daa5e72ce47836b34da36a3f1258ec45ec9080a261056190816100528239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630da7173e1461027957806313af4035146101ba578063542873411461014e5780637041c2a8146101135780638da5cb5b146100c35763e4bb26f21461005b575f80fd5b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff811681036100bf576100b5602091610432565b6040519015158152f35b5f80fd5b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576020600154604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576004356001548110156100bf5773ffffffffffffffffffffffffffffffffffffffff6101aa602092610388565b90549060031b1c16604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf57807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5461024f73ffffffffffffffffffffffffffffffffffffffff821633146103cd565b16175f557f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb55f80a2005b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf576102eb73ffffffffffffffffffffffffffffffffffffffff5f541633146103cd565b6001546801000000000000000081101561035b5780600161030f9201600155610388565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff84831b921b19161790557f4c5de04e0a9fb984302e76e361d50aa774fb7922dcfdc4ad004ad087ccfec9415f80a2005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6001548110156103a05760015f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b156103d457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b600154905f5b828110610446575050505f90565b6024602073ffffffffffffffffffffffffffffffffffffffff61046884610388565b90549060031b1c16604051928380927fe4bb26f200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff881660048301525afa908115610549575f916104db575b506104d357600101610438565b505050600190565b905060203d8111610542575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761035b576020918391604052810103126100bf575180151581036100bf575f6104c6565b503d6104e7565b6040513d5f823e3d90fdfea164736f6c634300081c000a","name":"RegistryList","is_blueprint":false,"license_type":"none","is_fully_verified":false,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"cancun","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":false,"additional_sources":[{"file_path":"lib/vault-v2-adapter-registries/lib/vault-v2/src/interfaces/IAdapterRegistry.sol","source_code":"// SPDX-License-Identifier: GPL-2.0-or-later\n// Copyright (c) 2025 Morpho Association\npragma solidity >=0.5.0;\n\ninterface IAdapterRegistry {\n    function isInRegistry(address account) external view returns (bool);\n}\n"},{"file_path":"lib/vault-v2-adapter-registries/src/interfaces/IRegistryList.sol","source_code":"// SPDX-License-Identifier: GPL-2.0-or-later\n// Copyright (c) 2025 Morpho Association\npragma solidity >=0.5.0;\n\nimport {IAdapterRegistry} from \"../../lib/vault-v2/src/interfaces/IAdapterRegistry.sol\";\n\ninterface IRegistryList is IAdapterRegistry {\n    function owner() external view returns (address);\n    function subRegistries(uint256 index) external view returns (address);\n    function subRegistriesLength() external view returns (uint256);\n    function setOwner(address newOwner) external;\n    function addSubRegistry(address subRegistry) external;\n}\n"}],"certified":false,"conflicting_implementations":null,"abi":[{"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"}],"is_changed_bytecode":false,"is_partially_verified":true,"constructor_args":null}