diff --git a/contracts/interfaces/modules/ITaggingModule.sol b/contracts/interfaces/modules/ITaggingModule.sol new file mode 100644 index 000000000..35cd77027 --- /dev/null +++ b/contracts/interfaces/modules/ITaggingModule.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.23; + +interface ITaggingModule { + event TagSet(string tag, address ipId); + + event TagRemoved(string tag, address ipId); +} diff --git a/contracts/modules/tagging/TaggingModule.sol b/contracts/modules/tagging/TaggingModule.sol index 2b42948b7..0353444a1 100644 --- a/contracts/modules/tagging/TaggingModule.sol +++ b/contracts/modules/tagging/TaggingModule.sol @@ -8,8 +8,9 @@ import { ShortStringOps } from "contracts/utils/ShortStringOps.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import { Errors } from "contracts/lib/Errors.sol"; import { IModule } from "contracts/interfaces/modules/base/IModule.sol"; +import { ITaggingModule } from "contracts/interfaces/modules/ITaggingModule.sol"; -contract TaggingModule is IModule { +contract TaggingModule is IModule, ITaggingModule { using ShortStrings for *; using EnumerableSet for EnumerableSet.Bytes32Set; using EnumerableSet for EnumerableSet.AddressSet; @@ -23,14 +24,15 @@ contract TaggingModule is IModule { function setTag(string calldata tag, address ipId) external returns (bool added) { // TODO: access control // TODO: emit + emit TagSet(tag, ipId); return _tagsForIpIds[ipId].add(ShortStringOps.stringToBytes32(tag)); } function removeTag(string calldata tag, address ipId) external returns (bool removed) { // TODO: access control + emit TagRemoved(tag, ipId); return _tagsForIpIds[ipId].remove(ShortStringOps.stringToBytes32(tag)); } - function isTagged(string calldata tag, address ipId) external view returns (bool) { return _tagsForIpIds[ipId].contains(ShortStringOps.stringToBytes32(tag)); }