Consolidate webapp structure by merging nested components into the main repository
This commit is contained in:
80
contracts/AdapterRegistry.sol
Normal file
80
contracts/AdapterRegistry.sol
Normal file
@@ -0,0 +1,80 @@
|
||||
// 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];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user