Copy function setOperator(address operator, bool approved) external returns (bool) {
if (msg.sender == operator) revert ErrorsLib.CannotSetSelfAsOperator();
isOperator[msg.sender][operator] = approved;
emit OperatorSet(msg.sender, operator, approved);
return true;
}
Copy function _validateController(address controller) internal view {
if (controller == address(0)) revert ErrorsLib.ZeroAddress();
if (controller != msg.sender && !isOperator[controller][msg.sender])
revert ErrorsLib.InvalidController();
}
Copy // Owner approves operator
node.setOperator(operatorAddress, true);
// Operator can then manage redemptions
function requestRedeem(uint256 shares, address controller, address owner) external {
// Operator can call with controller = owner
}
function withdraw(uint256 assets, address receiver, address controller) external {
// Operator can claim with controller = owner
}
Note: Operators cannot be set as self, and permissions can be revoked by setting approved to false.