From dcbba6bd5603650f5ae7f2800844c2584fa7b71c Mon Sep 17 00:00:00 2001 From: Anukul Sangwan Date: Thu, 2 Nov 2023 19:09:29 +0530 Subject: [PATCH] MainZone: add authorization filter --- src/zone/extensions/IMainZone.sol | 24 ++++++++++++++++++++++++ src/zone/extensions/MainZone.sol | 11 +++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/zone/extensions/IMainZone.sol b/src/zone/extensions/IMainZone.sol index 1f1cf26..33faed3 100644 --- a/src/zone/extensions/IMainZone.sol +++ b/src/zone/extensions/IMainZone.sol @@ -6,6 +6,26 @@ interface IMainZone { event SecondaryZoneSet(address indexed newSecondayZone); + event FilterUpdated(address indexed actor, Filter filter); + + struct RangeFilter { + uint gt; + uint lt; + } + + struct TokenFilter { + address token; + RangeFilter amount; + } + + struct Filter { + address offerer; + TokenFilter[] offer; + TokenFilter consideration; + RangeFilter deadline; + RangeFilter nonce; + } + /** * @notice Get the secondary zone address that performs additional validation for this zone. * @@ -37,4 +57,8 @@ interface IMainZone { * @notice Restricted function to resume regular validation functionality. */ function unpause() external; + + function setAuthorizationFilter(address actor, Filter calldata filter) external; + + function authorizationFilter(address actor) external view returns (Filter memory); } diff --git a/src/zone/extensions/MainZone.sol b/src/zone/extensions/MainZone.sol index 15f587e..6e08ffa 100644 --- a/src/zone/extensions/MainZone.sol +++ b/src/zone/extensions/MainZone.sol @@ -18,6 +18,8 @@ contract MainZone is Zone, IMainZone, AccessControlDefaultAdminRules, Pausable { address public secondaryZone; + mapping (address => Filter) public filters; + constructor(address admin) AccessControlDefaultAdminRules(2 days, admin) {} function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { @@ -97,4 +99,13 @@ contract MainZone is Zone, IMainZone, AccessControlDefaultAdminRules, Pausable { } } } + + function setAuthorizationFilter(address actor, Filter calldata filter) external onlyRole(DEFAULT_ADMIN_ROLE) { + filters[actor] = filter; + emit FilterUpdated(actor, filter); + } + + function authorizationFilter(address actor) external view returns (Filter memory) { + return filters[actor]; + } }