mirror of
https://github.com/lens-protocol/core.git
synced 2026-01-09 14:18:04 -05:00
Merge pull request #162 from lens-protocol/feat/module-metadata-refresh
feat: module metadata refresh signaling at registry
This commit is contained in:
@@ -132,7 +132,7 @@
|
|||||||
"LensHandles": "0xe7E7EaD361f3AaCD73A61A9bD6C10cA17F38E945",
|
"LensHandles": "0xe7E7EaD361f3AaCD73A61A9bD6C10cA17F38E945",
|
||||||
"TokenHandleRegistryImpl": "0x52fa68D73C83df39B9a637F82361d9b70aAb74F4",
|
"TokenHandleRegistryImpl": "0x52fa68D73C83df39B9a637F82361d9b70aAb74F4",
|
||||||
"TokenHandleRegistry": "0xD4F2F33680FCCb36748FA9831851643781608844",
|
"TokenHandleRegistry": "0xD4F2F33680FCCb36748FA9831851643781608844",
|
||||||
"ModuleRegistryImpl": "0xeD935AcE8f82FcAB4cae41F240c3a4aE51931313",
|
"ModuleRegistryImpl": "0xf6fDD7932219D64f267E4BfaF8d19774526d31D9",
|
||||||
"ModuleRegistry": "0x1eD5983F0c883B96f7C35528a1e22EEA67DE3Ff9",
|
"ModuleRegistry": "0x1eD5983F0c883B96f7C35528a1e22EEA67DE3Ff9",
|
||||||
"LensHubV2Impl": "0x92fE81FF570869eDE4c90fc5C949bb566b1f52f7",
|
"LensHubV2Impl": "0x92fE81FF570869eDE4c90fc5C949bb566b1f52f7",
|
||||||
"GovernanceContract": "0xB03B8801cF9D074Ea468aAA8eBd9B5EeD67Ac5B6",
|
"GovernanceContract": "0xB03B8801cF9D074Ea468aAA8eBd9B5EeD67Ac5B6",
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ interface IModuleRegistry {
|
|||||||
|
|
||||||
function isModuleRegisteredAs(address moduleAddress, uint256 moduleType) external view returns (bool);
|
function isModuleRegisteredAs(address moduleAddress, uint256 moduleType) external view returns (bool);
|
||||||
|
|
||||||
|
function emitModuleMetadataRefresh(address moduleAddress) external;
|
||||||
|
|
||||||
// Currencies functions
|
// Currencies functions
|
||||||
|
|
||||||
function verifyErc20Currency(address currencyAddress) external returns (bool);
|
function verifyErc20Currency(address currencyAddress) external returns (bool);
|
||||||
|
|||||||
@@ -34,12 +34,15 @@ contract ModuleRegistry is IModuleRegistry {
|
|||||||
uint256 timestamp
|
uint256 timestamp
|
||||||
);
|
);
|
||||||
|
|
||||||
|
event ModuleMetadataRefreshed(address indexed moduleAddress, string metadata, uint256 timestamp);
|
||||||
|
|
||||||
error NotLensModule();
|
error NotLensModule();
|
||||||
error ModuleDoesNotSupportType(uint256 moduleType);
|
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
|
// Modules
|
||||||
|
|
||||||
@@ -55,7 +58,7 @@ contract ModuleRegistry is IModuleRegistry {
|
|||||||
'Module Type out of bounds'
|
'Module Type out of bounds'
|
||||||
);
|
);
|
||||||
|
|
||||||
bool isAlreadyRegisteredAsThatType = registeredModules[moduleAddress] & (1 << moduleType) != 0;
|
bool isAlreadyRegisteredAsThatType = _registeredModules[moduleAddress] & (1 << moduleType) != 0;
|
||||||
if (isAlreadyRegisteredAsThatType) {
|
if (isAlreadyRegisteredAsThatType) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@@ -67,7 +70,7 @@ contract ModuleRegistry is IModuleRegistry {
|
|||||||
|
|
||||||
string memory metadata = ILensModule(moduleAddress).getModuleMetadataURI();
|
string memory metadata = ILensModule(moduleAddress).getModuleMetadataURI();
|
||||||
emit ModuleRegistered(moduleAddress, moduleType, metadata, block.timestamp);
|
emit ModuleRegistered(moduleAddress, moduleType, metadata, block.timestamp);
|
||||||
registeredModules[moduleAddress] |= (1 << moduleType);
|
_registeredModules[moduleAddress] |= (1 << moduleType);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,16 +93,16 @@ contract ModuleRegistry is IModuleRegistry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getModuleTypes(address moduleAddress) public view returns (uint256) {
|
function getModuleTypes(address moduleAddress) public view returns (uint256) {
|
||||||
return registeredModules[moduleAddress];
|
return _registeredModules[moduleAddress];
|
||||||
}
|
}
|
||||||
|
|
||||||
function isModuleRegistered(address moduleAddress) external view returns (bool) {
|
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) {
|
function isModuleRegisteredAs(address moduleAddress, uint256 moduleType) public view returns (bool) {
|
||||||
require(moduleType <= type(uint8).max);
|
require(moduleType <= type(uint8).max);
|
||||||
return registeredModules[moduleAddress] & (1 << moduleType) != 0;
|
return _registeredModules[moduleAddress] & (1 << moduleType) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Currencies
|
// Currencies
|
||||||
@@ -110,7 +113,7 @@ contract ModuleRegistry is IModuleRegistry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function registerErc20Currency(address currencyAddress) public returns (bool registrationWasPerformed) {
|
function registerErc20Currency(address currencyAddress) public returns (bool registrationWasPerformed) {
|
||||||
bool isAlreadyRegistered = registeredErc20Currencies[currencyAddress];
|
bool isAlreadyRegistered = _registeredErc20Currencies[currencyAddress];
|
||||||
if (isAlreadyRegistered) {
|
if (isAlreadyRegistered) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@@ -119,12 +122,19 @@ contract ModuleRegistry is IModuleRegistry {
|
|||||||
string memory symbol = IERC20Metadata(currencyAddress).symbol();
|
string memory symbol = IERC20Metadata(currencyAddress).symbol();
|
||||||
|
|
||||||
emit erc20CurrencyRegistered(currencyAddress, name, symbol, decimals, block.timestamp);
|
emit erc20CurrencyRegistered(currencyAddress, name, symbol, decimals, block.timestamp);
|
||||||
registeredErc20Currencies[currencyAddress] = true;
|
_registeredErc20Currencies[currencyAddress] = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function isErc20CurrencyRegistered(address currencyAddress) external view returns (bool) {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user