diff --git a/contracts/flusher.sol b/contracts/flusher.sol index 4c0ff58..0b2cdbb 100644 --- a/contracts/flusher.sol +++ b/contracts/flusher.sol @@ -12,6 +12,8 @@ contract Flusher { event LogCast(address indexed sender, uint value); string constant public name = "Flusher-v1"; + uint constant version = 1; + RegistryInterface public constant registry = RegistryInterface(address(0)); // TODO - Change while deploying. function spell(address _target, bytes memory _data) internal { diff --git a/contracts/registry.sol b/contracts/registry.sol index 81da316..c428d93 100644 --- a/contracts/registry.sol +++ b/contracts/registry.sol @@ -22,6 +22,8 @@ contract Registry { event LogRemovePool(address indexed token, address indexed pool); event LogAddSettleLogic(address indexed token, address indexed logic); event LogRemoveSettleLogic(address indexed token, address indexed logic); + event LogConnectorEnable(address indexed connector); + event LogConnectorDisable(address indexed connector); IndexInterface public constant instaIndex = IndexInterface(0x2971AdFa57b20E5a416aE5a708A8655A9c74f723); @@ -33,6 +35,7 @@ contract Registry { mapping (address => uint) public poolCap; mapping (address => uint) public fee; mapping (address => mapping(address => bool)) public settleLogic; + mapping(address => bool) public connectors; modifier isMaster() { require(msg.sender == instaIndex.master(), "not-master"); @@ -180,13 +183,37 @@ contract Registry { emit LogRemoveSettleLogic(_pool, _logic); } - function checkSettleLogics(address _pool, address[] calldata _logics) external view returns(bool) { + function enableConnector(address _connector) external isChief { + require(!connectors[_connector], "already-enabled"); + require(_connector != address(0), "invalid-connector"); + connectors[_connector] = true; + emit LogConnectorEnable(_connector); + } + + function disableConnector(address _connector) external isChief { + require(connectors[_connector], "already-disabled"); + delete connectors[_connector]; + emit LogConnectorDisable(_connector); + } + + function checkSettleLogics(address _pool, address[] calldata _logics) external view returns(bool isOk) { + isOk = true; for (uint i = 0; i < _logics.length; i++) { if (!settleLogic[_pool][_logics[i]]) { - return false; + isOk = false; + break; + } + } + } + + function isConnector(address[] calldata _connectors) external view returns (bool isOk) { + isOk = true; + for (uint i = 0; i < _connectors.length; i++) { + if (!connectors[_connectors[i]]) { + isOk = false; + break; } } - return true; } constructor(address _chief) public {