Skip to content

Commit 12ff6ea

Browse files
committed
Add ERC-165 support for rule
1 parent a2d039d commit 12ff6ea

5 files changed

Lines changed: 28 additions & 4 deletions

File tree

src/rules/validation/RuleBlacklist.sol

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
pragma solidity ^0.8.20;
44

5+
import {AccessControl} from "OZ/access/AccessControl.sol";
56
/* ==== Abtract contracts === */
67
import {RuleBlacklistInvariantStorage} from
78
"./abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol";
89
import {RuleAddressSet} from "./abstract/RuleAddressSet/RuleAddressSet.sol";
9-
import {RuleValidateTransfer} from "./abstract/RuleValidateTransfer.sol";
10+
import {RuleValidateTransfer, RuleValidateTransfer} from "./abstract/RuleValidateTransfer.sol";
1011
/* ==== Interfaces === */
1112
import {IERC7943NonFungibleComplianceExtend} from "../interfaces/IERC7943NonFungibleCompliance.sol";
1213
/* ==== CMTAT === */
@@ -134,6 +135,10 @@ contract RuleBlacklist is RuleValidateTransfer, RuleAddressSet, RuleBlacklistInv
134135
}
135136
}
136137

138+
function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControl, RuleValidateTransfer) returns (bool) {
139+
return AccessControl.supportsInterface(interfaceId) || RuleValidateTransfer.supportsInterface(interfaceId);
140+
}
141+
137142
/* ============ State Functions ============ */
138143

139144
function transferred(address from, address to, uint256 value)

src/rules/validation/RuleSanctionsList.sol

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
pragma solidity ^0.8.20;
44

5+
import {AccessControl} from "OZ/access/AccessControl.sol";
56
/* ==== Abtract contracts === */
67
import {MetaTxModuleStandalone, ERC2771Context, Context} from "../../modules/MetaTxModuleStandalone.sol";
78
import {AccessControlModuleStandalone} from "../../modules/AccessControlModuleStandalone.sol";
89
import {RuleSanctionsListInvariantStorage} from "./abstract/RuleSanctionsListInvariantStorage.sol";
9-
import {RuleValidateTransfer} from "./abstract/RuleValidateTransfer.sol";
10+
import {RuleValidateTransfer, RuleValidateTransfer} from "./abstract/RuleValidateTransfer.sol";
1011
/* ==== Interfaces === */
1112
import {ISanctionsList} from "../interfaces/ISanctionsList.sol";
1213
import {IERC7943NonFungibleComplianceExtend} from "../interfaces/IERC7943NonFungibleCompliance.sol";
@@ -163,6 +164,10 @@ contract RuleSanctionsList is
163164
}
164165
}
165166

167+
function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControl, RuleValidateTransfer) returns (bool) {
168+
return AccessControl.supportsInterface(interfaceId) || RuleValidateTransfer.supportsInterface(interfaceId);
169+
}
170+
166171
/* ============ State Functions ============ */
167172
/**
168173
* @notice Set the oracle contract

src/rules/validation/RuleWhitelist.sol

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
// SPDX-License-Identifier: MPL-2.0
22
pragma solidity ^0.8.20;
33

4+
import {AccessControl} from "OZ/access/AccessControl.sol";
45
/* ==== Abtract contracts === */
56
import {RuleAddressSet} from "./abstract/RuleAddressSet/RuleAddressSet.sol";
6-
import {RuleWhitelistCommon} from "./abstract/RuleWhitelistCommon.sol";
7+
import {RuleWhitelistCommon, RuleValidateTransfer} from "./abstract/RuleWhitelistCommon.sol";
78
/* ==== CMTAT === */
89
import {IERC1404, IERC1404Extend} from "CMTAT/interfaces/tokenization/draft-IERC1404.sol";
910
/* ==== Interfaces === */
@@ -138,4 +139,8 @@ contract RuleWhitelist is RuleAddressSet, RuleWhitelistCommon, IIdentityRegistry
138139
{
139140
isListed = _isAddressListed(targetAddress);
140141
}
142+
143+
function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControl, RuleValidateTransfer) returns (bool) {
144+
return AccessControl.supportsInterface(interfaceId) || RuleValidateTransfer.supportsInterface(interfaceId);
145+
}
141146
}

src/rules/validation/RuleWhitelistWrapper.sol

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {AccessControl} from "OZ/access/AccessControl.sol";
88
import {AccessControlModuleStandalone} from "../../modules/AccessControlModuleStandalone.sol";
99
import {MetaTxModuleStandalone, ERC2771Context, Context} from "../../modules/MetaTxModuleStandalone.sol";
1010
import {RuleAddressSet} from "./abstract/RuleAddressSet/RuleAddressSet.sol";
11-
import {RuleWhitelistCommon} from "./abstract/RuleWhitelistCommon.sol";
11+
import {RuleWhitelistCommon, RuleValidateTransfer} from "./abstract/RuleWhitelistCommon.sol";
1212
/* ==== RuleEngine === */
1313
import {RulesManagementModule} from "RuleEngine/modules/RulesManagementModule.sol";
1414
import {RuleEngineInvariantStorage} from "RuleEngine/modules/library/RuleEngineInvariantStorage.sol";
@@ -171,6 +171,10 @@ contract RuleWhitelistWrapper is
171171
return result;
172172
}
173173

174+
function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControl, RuleValidateTransfer) returns (bool) {
175+
return AccessControl.supportsInterface(interfaceId) || RuleValidateTransfer.supportsInterface(interfaceId);
176+
}
177+
174178
/*//////////////////////////////////////////////////////////////
175179
ERC-2771
176180
//////////////////////////////////////////////////////////////*/

src/rules/validation/abstract/RuleValidateTransfer.sol

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,9 @@ abstract contract RuleValidateTransfer is IERC7943NonFungibleComplianceExtend, I
7979
{
8080
return canTransferFrom(spender, from, to, value);
8181
}
82+
83+
84+
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
85+
return interfaceId == type(IRule).interfaceId;
86+
}
8287
}

0 commit comments

Comments
 (0)