diff --git a/packages/circuits/package.json b/packages/circuits/package.json index 26a5729a..1280b4e7 100644 --- a/packages/circuits/package.json +++ b/packages/circuits/package.json @@ -1,6 +1,6 @@ { "name": "@zk-email/circuits", - "version": "6.3.0", + "version": "6.3.1", "license": "MIT", "scripts": { "publish": "yarn npm publish --access=public", diff --git a/packages/contracts/UserOverrideableDKIMRegistry.sol b/packages/contracts/UserOverrideableDKIMRegistry.sol index d7f8a331..a5fee5f3 100644 --- a/packages/contracts/UserOverrideableDKIMRegistry.sol +++ b/packages/contracts/UserOverrideableDKIMRegistry.sol @@ -43,6 +43,9 @@ contract UserOverrideableDKIMRegistry is address indexed authorizer ); + /// @notice Emitted when the main authorizer address is changed. + event MainAuthorizerChanged(address indexed newMainAuthorizer); + /// @notice Main authorizer address. address public mainAuthorizer; @@ -356,6 +359,27 @@ contract UserOverrideableDKIMRegistry is emit DKIMPublicKeyHashReactivated(publicKeyHash, authorizer); } + /** + * @notice Changes the main authorizer address. + * @param newMainAuthorizer The address of the new main authorizer. + * @custom:require Only the owner can change the main authorizer address. + * @custom:require The new main authorizer address cannot be zero. + * @custom:require The new main authorizer address cannot be the same as the current main authorizer. + * @custom:event MainAuthorizerChanged Emitted when the main authorizer address changes. + */ + function changeMainAuthorizer(address newMainAuthorizer) public onlyOwner { + require( + newMainAuthorizer != address(0), + "newMainAuthorizer address cannot be zero" + ); + require( + newMainAuthorizer != mainAuthorizer, + "newMainAuthorizer address cannot be the same as the current mainAuthorizer" + ); + mainAuthorizer = newMainAuthorizer; + emit MainAuthorizerChanged(newMainAuthorizer); + } + /** * @notice Computes a signed message string for setting or revoking a DKIM public key hash. * @param prefix The operation prefix (SET: or REVOKE:). diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 6b48d728..65ca80d0 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,6 +1,6 @@ { "name": "@zk-email/contracts", - "version": "6.3.0", + "version": "6.3.1", "license": "MIT", "scripts": { "build": "forge build", diff --git a/packages/contracts/test/UserOverrideableDKIMRegistry.t.sol b/packages/contracts/test/UserOverrideableDKIMRegistry.t.sol index c7b65619..8fdd5cbc 100644 --- a/packages/contracts/test/UserOverrideableDKIMRegistry.t.sol +++ b/packages/contracts/test/UserOverrideableDKIMRegistry.t.sol @@ -590,6 +590,22 @@ contract UserOverrideableDKIMRegistryTest is Test { vm.stopPrank(); } + function testChangeMainAuthorizer() public { + vm.startPrank(deployer); + vm.expectEmit(); + emit UserOverrideableDKIMRegistry.MainAuthorizerChanged(user1); + registry.changeMainAuthorizer(user1); + vm.stopPrank(); + } + + function testChangeMainAuthorizerContract() public { + vm.startPrank(deployer); + vm.expectEmit(); + emit UserOverrideableDKIMRegistry.MainAuthorizerChanged(user1); + registryWithContract.changeMainAuthorizer(address(user1)); + vm.stopPrank(); + } + function testFailIsDKIMPublicKeyHashValidByUser2() public { testSetDKIMPublicKeyHashByUser1(); @@ -1099,4 +1115,32 @@ contract UserOverrideableDKIMRegistryTest is Test { ); console.log(signedMsg); } + + function testExpectRevertChangeMainAuthorizerByNonOwner() public { + vm.startPrank(mainAuthorizer); + vm.expectRevert( + abi.encodeWithSelector( + OwnableUpgradeable.OwnableUnauthorizedAccount.selector, + mainAuthorizer + ) + ); + registry.changeMainAuthorizer(user1); + vm.stopPrank(); + } + + function testExpectRevertChangeMainAuthorizerIsZero() public { + vm.startPrank(deployer); + vm.expectRevert("newMainAuthorizer address cannot be zero"); + registry.changeMainAuthorizer(address(0)); + vm.stopPrank(); + } + + function testExpectRevertChangeMainAuthorizerIsSame() public { + vm.startPrank(deployer); + vm.expectRevert( + "newMainAuthorizer address cannot be the same as the current mainAuthorizer" + ); + registry.changeMainAuthorizer(mainAuthorizer); + vm.stopPrank(); + } } diff --git a/packages/helpers/package.json b/packages/helpers/package.json index 93a8909f..6a684c38 100644 --- a/packages/helpers/package.json +++ b/packages/helpers/package.json @@ -1,6 +1,6 @@ { "name": "@zk-email/helpers", - "version": "6.3.0", + "version": "6.3.1", "license": "MIT", "main": "dist", "scripts": {