diff --git a/src/WorkingCapital.sol b/src/WorkingCapital.sol index ad7a073..0406635 100644 --- a/src/WorkingCapital.sol +++ b/src/WorkingCapital.sol @@ -10,12 +10,16 @@ import {IHats} from "./../hatsprotocol/src/Interfaces/IHats.sol"; contract WorkingCapital is PluginCloneable { + + bytes32 public constant UPDATE_SPENDING_LIMIT_PERMISSION_ID = keccak256('UPDATE_SPENDING_LIMIT_PERMISSION'); + struct MyAction { address to; uint256 value; address ERC20; } + IHats public hatsProtocolInstance; uint256 public hatId; mapping(address => uint256) public spendingLimit; @@ -114,4 +118,9 @@ contract WorkingCapital is PluginCloneable { IDAO.Action [] idaoAction = hasRemainingBudget(_myActions); dao().execute({_callId: 0x0, _actions: idaoAction, _allowFailureMap: 0}); } + + /// @param _spendingLimitETH The ETH spending limit + function updateSpendingLimit(uint256 _spendingLimitETH) external auth(UPDATE_SPENDING_LIMIT_PERMISSION_ID){ + spendingLimitETH = _spendingLimitETH; + } } diff --git a/src/WorkingCapitalSetup.sol b/src/WorkingCapitalSetup.sol index b9a26ea..8242aa5 100644 --- a/src/WorkingCapitalSetup.sol +++ b/src/WorkingCapitalSetup.sol @@ -44,7 +44,7 @@ contract WorkingCapitalSetup is PluginSetup { // Prepare permissions PermissionLib.MultiTargetPermission[] - memory permissions = new PermissionLib.MultiTargetPermission[](1); + memory permissions = new PermissionLib.MultiTargetPermission[](2); // Grant the `EXECUTE_PERMISSION` on the DAO to the plugin. permissions[0] = PermissionLib.MultiTargetPermission({ @@ -55,6 +55,14 @@ contract WorkingCapitalSetup is PluginSetup { permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); + permissions[1] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Grant, + where: plugin, + who: _dao, + condition: PermissionLib.NO_CONDITION, + permissionId: WorkingCapital(plugin).UPDATE_SPENDING_LIMIT_PERMISSION_ID() + }); + preparedSetupData.permissions = permissions; } @@ -71,7 +79,7 @@ contract WorkingCapitalSetup is PluginSetup { address plugin = _payload.plugin; // Prepare permissions - permissions = new PermissionLib.MultiTargetPermission[](1); + permissions = new PermissionLib.MultiTargetPermission[](2); permissions[0] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Revoke, @@ -80,6 +88,14 @@ contract WorkingCapitalSetup is PluginSetup { condition: PermissionLib.NO_CONDITION, permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); + + permissions[0] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Revoke, + where: plugin, + who: _dao, + condition: PermissionLib.NO_CONDITION, + permissionId: WorkingCapital(plugin).UPDATE_SPENDING_LIMIT_PERMISSION_ID() + }); } /// @inheritdoc IPluginSetup