From b4ddb7d39e96b9cbf3891fa7aea52e449d373703 Mon Sep 17 00:00:00 2001 From: JaredBorders Date: Fri, 15 Sep 2023 13:31:12 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=B7=F0=9F=8F=BB=E2=80=8D=E2=99=82?= =?UTF-8?q?=EF=B8=8F=20H-2:=20Rework=20delegate=20permission=20logic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Engine.sol | 2 +- src/interfaces/IEngine.sol | 2 ++ test/Authentication.t.sol | 8 +++++--- test/ConditionalOrder.t.sol | 10 +++++++++- test/NonceBitmap.t.sol | 2 +- test/utils/Constants.sol | 3 +++ 6 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/Engine.sol b/src/Engine.sol index e3dc980a..890fbddb 100644 --- a/src/Engine.sol +++ b/src/Engine.sol @@ -96,7 +96,7 @@ contract Engine is IEngine, Multicallable, EIP712 { returns (bool) { return PERPS_MARKET_PROXY.hasPermission( - _accountId, Constants.ADMIN_PERMISSION, _caller + _accountId, Constants.PERPS_COMMIT_ASYNC_ORDER_PERMISSION, _caller ); } diff --git a/src/interfaces/IEngine.sol b/src/interfaces/IEngine.sol index 9a0fa5e2..16612cd7 100644 --- a/src/interfaces/IEngine.sol +++ b/src/interfaces/IEngine.sol @@ -91,6 +91,8 @@ interface IEngine { /// @notice check if the msg.sender is a delegate of the account /// identified by the accountId + /// @dev a delegate is an address that has been given + /// PERPS_COMMIT_ASYNC_ORDER_PERMISSION permission /// @param _accountId the id of the account to check /// @param _caller the address to check /// @return true if the msg.sender is a delegate of the account diff --git a/test/Authentication.t.sol b/test/Authentication.t.sol index 51f7d64a..5fa1ceca 100644 --- a/test/Authentication.t.sol +++ b/test/Authentication.t.sol @@ -52,7 +52,7 @@ contract AccountDelegate is AuthenticationTest { perpsMarketProxy.grantPermission({ accountId: accountId, - permission: ADMIN_PERMISSION, + permission: PERPS_COMMIT_ASYNC_ORDER_PERMISSION, user: NEW_ACTOR }); @@ -70,7 +70,7 @@ contract AccountDelegate is AuthenticationTest { perpsMarketProxy.grantPermission({ accountId: accountId, - permission: ADMIN_PERMISSION, + permission: PERPS_COMMIT_ASYNC_ORDER_PERMISSION, user: NEW_ACTOR }); @@ -96,9 +96,11 @@ contract AccountDelegate is AuthenticationTest { ) ); + // only admin and owner can grant permission + perpsMarketProxy.grantPermission({ accountId: accountId, - permission: ADMIN_PERMISSION, + permission: PERPS_COMMIT_ASYNC_ORDER_PERMISSION, user: NEW_ACTOR }); } diff --git a/test/ConditionalOrder.t.sol b/test/ConditionalOrder.t.sol index e34417d5..abf8fc2c 100644 --- a/test/ConditionalOrder.t.sol +++ b/test/ConditionalOrder.t.sol @@ -384,9 +384,17 @@ contract VerifyConditions is ConditionalOrderTest { function test_verifyConditions_public_non_condition_isAccountDelegate() public { + vm.prank(signer); + + perpsMarketProxy.grantPermission({ + accountId: accountId, + permission: PERPS_COMMIT_ASYNC_ORDER_PERMISSION, + user: DELEGATE_1 + }); + bytes[] memory conditions = new bytes[](1); conditions[0] = abi.encodeWithSelector( - IEngine.isAccountDelegate.selector, accountId, address(engine) + IEngine.isAccountDelegate.selector, accountId, DELEGATE_1 ); IEngine.OrderDetails memory orderDetails; diff --git a/test/NonceBitmap.t.sol b/test/NonceBitmap.t.sol index 17e527d6..4db955cd 100644 --- a/test/NonceBitmap.t.sol +++ b/test/NonceBitmap.t.sol @@ -127,7 +127,7 @@ contract NonceBitmap is Bootstrap, ConditionalOrderSignature { perpsMarketProxy.grantPermission({ accountId: accountId, - permission: ADMIN_PERMISSION, + permission: PERPS_COMMIT_ASYNC_ORDER_PERMISSION, user: NEW_ACTOR }); diff --git a/test/utils/Constants.sol b/test/utils/Constants.sol index 0b4d7092..9ad4153e 100644 --- a/test/utils/Constants.sol +++ b/test/utils/Constants.sol @@ -13,6 +13,9 @@ contract Constants { bytes32 internal constant ADMIN_PERMISSION = "ADMIN"; + bytes32 internal constant PERPS_COMMIT_ASYNC_ORDER_PERMISSION = + "PERPS_COMMIT_ASYNC_ORDER"; + address internal constant MOCK_MARGIN_ENGINE = address(0xE1); address internal constant ACTOR = address(0xa1);