81 lines
2.3 KiB
Solidity
81 lines
2.3 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.20;
|
|
|
|
import "@openzeppelin/contracts/access/Ownable.sol";
|
|
import "./interfaces/IAdapterRegistry.sol";
|
|
|
|
/**
|
|
* @title AdapterRegistry
|
|
* @notice Manages whitelist/blacklist of protocol adapters
|
|
*/
|
|
contract AdapterRegistry is IAdapterRegistry, Ownable {
|
|
mapping(address => AdapterInfo) public adapters;
|
|
mapping(address => bool) public whitelist;
|
|
mapping(address => bool) public blacklist;
|
|
|
|
event AdapterRegistered(address indexed adapter, string name, AdapterType adapterType);
|
|
event AdapterWhitelisted(address indexed adapter, bool whitelisted);
|
|
event AdapterBlacklisted(address indexed adapter, bool blacklisted);
|
|
|
|
/**
|
|
* @notice Register a new adapter
|
|
*/
|
|
function registerAdapter(
|
|
address adapter,
|
|
string calldata name,
|
|
AdapterType adapterType
|
|
) external onlyOwner {
|
|
require(adapters[adapter].registeredAt == 0, "Adapter already registered");
|
|
|
|
adapters[adapter] = AdapterInfo({
|
|
name: name,
|
|
adapterType: adapterType,
|
|
registeredAt: block.timestamp,
|
|
whitelisted: false
|
|
});
|
|
|
|
emit AdapterRegistered(adapter, name, adapterType);
|
|
}
|
|
|
|
/**
|
|
* @notice Whitelist an adapter
|
|
*/
|
|
function setWhitelist(address adapter, bool _whitelisted) external onlyOwner {
|
|
require(adapters[adapter].registeredAt > 0, "Adapter not registered");
|
|
|
|
adapters[adapter].whitelisted = _whitelisted;
|
|
whitelist[adapter] = _whitelisted;
|
|
|
|
emit AdapterWhitelisted(adapter, _whitelisted);
|
|
}
|
|
|
|
/**
|
|
* @notice Blacklist an adapter
|
|
*/
|
|
function setBlacklist(address adapter, bool _blacklisted) external onlyOwner {
|
|
blacklist[adapter] = _blacklisted;
|
|
|
|
if (_blacklisted) {
|
|
adapters[adapter].whitelisted = false;
|
|
whitelist[adapter] = false;
|
|
}
|
|
|
|
emit AdapterBlacklisted(adapter, _blacklisted);
|
|
}
|
|
|
|
/**
|
|
* @notice Check if adapter is whitelisted
|
|
*/
|
|
function isWhitelisted(address adapter) external view override returns (bool) {
|
|
return !blacklist[adapter] && adapters[adapter].whitelisted;
|
|
}
|
|
|
|
/**
|
|
* @notice Get adapter info
|
|
*/
|
|
function getAdapter(address adapter) external view returns (AdapterInfo memory) {
|
|
return adapters[adapter];
|
|
}
|
|
}
|
|
|