ETH Price: $4,516.58 (+1.50%)

Contract

0xA9132a09838fD20304dF2B2892679d06A4cc6371

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

N/A
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
130968532025-10-07 12:21:0434 hrs ago1759839664  Contract Creation0 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
// 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);
}

Settings
{
  "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

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"}]

60808060405234604d575f80546001600160a01b031916339081178255907f385bc760a35ad4b8b2c11c6a4c6d27daa5e72ce47836b34da36a3f1258ec45ec9080a261056190816100528239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630da7173e1461027957806313af4035146101ba578063542873411461014e5780637041c2a8146101135780638da5cb5b146100c35763e4bb26f21461005b575f80fd5b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff811681036100bf576100b5602091610432565b6040519015158152f35b5f80fd5b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576020600154604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576004356001548110156100bf5773ffffffffffffffffffffffffffffffffffffffff6101aa602092610388565b90549060031b1c16604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf57807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5461024f73ffffffffffffffffffffffffffffffffffffffff821633146103cd565b16175f557f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb55f80a2005b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf576102eb73ffffffffffffffffffffffffffffffffffffffff5f541633146103cd565b6001546801000000000000000081101561035b5780600161030f9201600155610388565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff84831b921b19161790557f4c5de04e0a9fb984302e76e361d50aa774fb7922dcfdc4ad004ad087ccfec9415f80a2005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6001548110156103a05760015f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b156103d457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b600154905f5b828110610446575050505f90565b6024602073ffffffffffffffffffffffffffffffffffffffff61046884610388565b90549060031b1c16604051928380927fe4bb26f200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff881660048301525afa908115610549575f916104db575b506104d357600101610438565b505050600190565b905060203d8111610542575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761035b576020918391604052810103126100bf575180151581036100bf575f6104c6565b503d6104e7565b6040513d5f823e3d90fdfea164736f6c634300081c000a

Deployed Bytecode

0x60806040526004361015610011575f80fd5b5f3560e01c80630da7173e1461027957806313af4035146101ba578063542873411461014e5780637041c2a8146101135780638da5cb5b146100c35763e4bb26f21461005b575f80fd5b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff811681036100bf576100b5602091610432565b6040519015158152f35b5f80fd5b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100bf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576020600154604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf576004356001548110156100bf5773ffffffffffffffffffffffffffffffffffffffff6101aa602092610388565b90549060031b1c16604051908152f35b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf57807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5461024f73ffffffffffffffffffffffffffffffffffffffff821633146103cd565b16175f557f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb55f80a2005b346100bf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bf5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100bf576102eb73ffffffffffffffffffffffffffffffffffffffff5f541633146103cd565b6001546801000000000000000081101561035b5780600161030f9201600155610388565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff84831b921b19161790557f4c5de04e0a9fb984302e76e361d50aa774fb7922dcfdc4ad004ad087ccfec9415f80a2005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6001548110156103a05760015f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b156103d457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b600154905f5b828110610446575050505f90565b6024602073ffffffffffffffffffffffffffffffffffffffff61046884610388565b90549060031b1c16604051928380927fe4bb26f200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff881660048301525afa908115610549575f916104db575b506104d357600101610438565b505050600190565b905060203d8111610542575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761035b576020918391604052810103126100bf575180151581036100bf575f6104c6565b503d6104e7565b6040513d5f823e3d90fdfea164736f6c634300081c000a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
0xA9132a09838fD20304dF2B2892679d06A4cc6371
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.