diff --git a/addresses.json b/addresses.json index 6d4dc1d..c33ca98 100644 --- a/addresses.json +++ b/addresses.json @@ -132,7 +132,7 @@ "LensHandles": "0xe7E7EaD361f3AaCD73A61A9bD6C10cA17F38E945", "TokenHandleRegistryImpl": "0x52fa68D73C83df39B9a637F82361d9b70aAb74F4", "TokenHandleRegistry": "0xD4F2F33680FCCb36748FA9831851643781608844", - "ModuleRegistryImpl": "0xeD935AcE8f82FcAB4cae41F240c3a4aE51931313", + "ModuleRegistryImpl": "0xf6fDD7932219D64f267E4BfaF8d19774526d31D9", "ModuleRegistry": "0x1eD5983F0c883B96f7C35528a1e22EEA67DE3Ff9", "LensHubV2Impl": "0x92fE81FF570869eDE4c90fc5C949bb566b1f52f7", "GovernanceContract": "0xB03B8801cF9D074Ea468aAA8eBd9B5EeD67Ac5B6", diff --git a/contracts/interfaces/IModuleRegistry.sol b/contracts/interfaces/IModuleRegistry.sol index f4d39d2..e89893e 100644 --- a/contracts/interfaces/IModuleRegistry.sol +++ b/contracts/interfaces/IModuleRegistry.sol @@ -22,6 +22,8 @@ interface IModuleRegistry { function isModuleRegisteredAs(address moduleAddress, uint256 moduleType) external view returns (bool); + function emitModuleMetadataRefresh(address moduleAddress) external; + // Currencies functions function verifyErc20Currency(address currencyAddress) external returns (bool); diff --git a/contracts/misc/ModuleRegistry.sol b/contracts/misc/ModuleRegistry.sol index a49e90e..f8ae128 100644 --- a/contracts/misc/ModuleRegistry.sol +++ b/contracts/misc/ModuleRegistry.sol @@ -34,12 +34,15 @@ contract ModuleRegistry is IModuleRegistry { uint256 timestamp ); + event ModuleMetadataRefreshed(address indexed moduleAddress, string metadata, uint256 timestamp); + error NotLensModule(); error ModuleDoesNotSupportType(uint256 moduleType); + error ModuleNotRegistered(); - mapping(address moduleAddress => uint256 moduleTypesBitmap) internal registeredModules; + mapping(address moduleAddress => uint256 moduleTypesBitmap) internal _registeredModules; - mapping(address erc20CurrencyAddress => bool) internal registeredErc20Currencies; + mapping(address erc20CurrencyAddress => bool) internal _registeredErc20Currencies; // Modules @@ -55,7 +58,7 @@ contract ModuleRegistry is IModuleRegistry { 'Module Type out of bounds' ); - bool isAlreadyRegisteredAsThatType = registeredModules[moduleAddress] & (1 << moduleType) != 0; + bool isAlreadyRegisteredAsThatType = _registeredModules[moduleAddress] & (1 << moduleType) != 0; if (isAlreadyRegisteredAsThatType) { return false; } else { @@ -67,7 +70,7 @@ contract ModuleRegistry is IModuleRegistry { string memory metadata = ILensModule(moduleAddress).getModuleMetadataURI(); emit ModuleRegistered(moduleAddress, moduleType, metadata, block.timestamp); - registeredModules[moduleAddress] |= (1 << moduleType); + _registeredModules[moduleAddress] |= (1 << moduleType); return true; } } @@ -90,16 +93,16 @@ contract ModuleRegistry is IModuleRegistry { } function getModuleTypes(address moduleAddress) public view returns (uint256) { - return registeredModules[moduleAddress]; + return _registeredModules[moduleAddress]; } function isModuleRegistered(address moduleAddress) external view returns (bool) { - return registeredModules[moduleAddress] != 0; + return _registeredModules[moduleAddress] != 0; } function isModuleRegisteredAs(address moduleAddress, uint256 moduleType) public view returns (bool) { require(moduleType <= type(uint8).max); - return registeredModules[moduleAddress] & (1 << moduleType) != 0; + return _registeredModules[moduleAddress] & (1 << moduleType) != 0; } // Currencies @@ -110,7 +113,7 @@ contract ModuleRegistry is IModuleRegistry { } function registerErc20Currency(address currencyAddress) public returns (bool registrationWasPerformed) { - bool isAlreadyRegistered = registeredErc20Currencies[currencyAddress]; + bool isAlreadyRegistered = _registeredErc20Currencies[currencyAddress]; if (isAlreadyRegistered) { return false; } else { @@ -119,12 +122,19 @@ contract ModuleRegistry is IModuleRegistry { string memory symbol = IERC20Metadata(currencyAddress).symbol(); emit erc20CurrencyRegistered(currencyAddress, name, symbol, decimals, block.timestamp); - registeredErc20Currencies[currencyAddress] = true; + _registeredErc20Currencies[currencyAddress] = true; return true; } } function isErc20CurrencyRegistered(address currencyAddress) external view returns (bool) { - return registeredErc20Currencies[currencyAddress]; + return _registeredErc20Currencies[currencyAddress]; + } + + function emitModuleMetadataRefresh(address moduleAddress) external { + if (_registeredModules[moduleAddress] == 0) { + revert ModuleNotRegistered(); + } + emit ModuleMetadataRefreshed(moduleAddress, ILensModule(moduleAddress).getModuleMetadataURI(), block.timestamp); } }