Skip to content
This repository was archived by the owner on Sep 1, 2023. It is now read-only.

Commit a06c5a4

Browse files
use bool flag to revoke
1 parent db24b7c commit a06c5a4

File tree

3 files changed

+39
-5
lines changed

3 files changed

+39
-5
lines changed

src/RevokableOperatorFilterer.sol

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ abstract contract RevokableOperatorFilterer is UpdatableOperatorFilterer {
1616
error RegistryHasBeenRevoked();
1717
error InitialRegistryAddressCannotBeZeroAddress();
1818

19+
bool public isOperatorFilterRegistryRevoked;
20+
1921
constructor(address _registry, address subscriptionOrRegistrantToCopy, bool subscribe)
2022
UpdatableOperatorFilterer(_registry, subscriptionOrRegistrantToCopy, subscribe)
2123
{
@@ -39,15 +41,28 @@ abstract contract RevokableOperatorFilterer is UpdatableOperatorFilterer {
3941
if (msg.sender != owner()) {
4042
revert OnlyOwner();
4143
}
42-
// if registry address has been set to 0 (revoked), do not allow further updates
43-
if (address(operatorFilterRegistry) == address(0)) {
44+
// if registry has been revoked, do not allow further updates
45+
if (isOperatorFilterRegistryRevoked) {
4446
revert RegistryHasBeenRevoked();
4547
}
4648

4749
operatorFilterRegistry = IOperatorFilterRegistry(newRegistry);
4850
}
4951

50-
function isOperatorFilterRegistryRevoked() public view returns (bool) {
51-
return address(operatorFilterRegistry) == address(0);
52+
/**
53+
* @notice Revoke the OperatorFilterRegistry address, permanently bypassing checks. OnlyOwner.
54+
*/
55+
function revokeOperatorFilterRegistry() public {
56+
if (msg.sender != owner()) {
57+
revert OnlyOwner();
58+
}
59+
// if registry has been revoked, do not allow further updates
60+
if (isOperatorFilterRegistryRevoked) {
61+
revert RegistryHasBeenRevoked();
62+
}
63+
64+
// set to zero address to bypass checks
65+
operatorFilterRegistry = IOperatorFilterRegistry(address(0));
66+
isOperatorFilterRegistryRevoked = true;
5267
}
5368
}

test/RevokableDefaultOperatorFilterer.t.sol

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,14 @@ contract RevokableDefaultOperatorFiltererTest is BaseRegistryTest {
5151

5252
vm.startPrank(DEFAULT_SUBSCRIPTION);
5353
filterer.updateOperatorFilterRegistryAddress(address(0));
54-
assertTrue(filterer.isOperatorFilterRegistryRevoked());
54+
assertFalse(filterer.isOperatorFilterRegistryRevoked());
5555
vm.stopPrank();
5656
vm.expectRevert(abi.encodeWithSignature("OnlyOwner()"));
5757
filterer.updateOperatorFilterRegistryAddress(address(0));
58+
5859
vm.startPrank(DEFAULT_SUBSCRIPTION);
60+
filterer.revokeOperatorFilterRegistry();
61+
5962
vm.expectRevert(abi.encodeWithSignature("RegistryHasBeenRevoked()"));
6063
filterer.updateOperatorFilterRegistryAddress(address(0));
6164
vm.stopPrank();

test/RevokableOperatorFilterer.sol

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,24 @@ contract RevokableOperatorFiltererTest is BaseRegistryTest {
108108
assertTrue(filterer.testFilter(address(0)));
109109

110110
// cannot update even if registry is zero address
111+
// vm.expectRevert(abi.encodeWithSignature("RegistryHasBeenRevoked()"));
112+
filterer.updateOperatorFilterRegistryAddress(address(registry));
113+
vm.startPrank(filteredAddress);
114+
vm.expectRevert(abi.encodeWithSelector(AddressFiltered.selector, filteredAddress));
115+
filterer.testFilter(address(0));
116+
vm.stopPrank();
117+
118+
filterer.revokeOperatorFilterRegistry();
119+
vm.prank(filteredAddress);
120+
assertTrue(filterer.testFilter(address(0)));
121+
122+
assertEq(address(filterer.operatorFilterRegistry()), address(0));
123+
assertTrue(filterer.isOperatorFilterRegistryRevoked());
124+
111125
vm.expectRevert(abi.encodeWithSignature("RegistryHasBeenRevoked()"));
112126
filterer.updateOperatorFilterRegistryAddress(address(registry));
127+
vm.expectRevert(abi.encodeWithSignature("RegistryHasBeenRevoked()"));
128+
filterer.revokeOperatorFilterRegistry();
113129
}
114130

115131
function testConstructor_revertOnZeroAddress() public {

0 commit comments

Comments
 (0)