Files
CurrenciCombo/contracts/AdapterRegistry.sol

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