# DelegationOwner

The DelegationOwner contract manages asset and signature delegation within the Unlockd Wallet. It allows the wallet owner to delegate specific assets to trusted parties for a defined duration and provides functionality for signature delegation.&#x20;

## Key Functions:

```solidity
function initialize(
    address _guard, 
    address _safe, 
    address _owner, 
    address _delegationController, 
    address _protocolOwner
) public
```

Initializes the DelegationOwner contract with the necessary parameters.

### Parameters:

`_guard` (address): The address of the TransactionGuard contract.

`_safe` (address): The address of the GnosisSafe contract.

`_owner` (address): The address of the wallet owner.

`_delegationController` (address): The address of the delegation controller.

`_protocolOwner` (address): The address of the protocol owner.

***

```solidity
function setDelegationController(
    address _delegationController, 
    bool _allowed
) external;
```

Sets a delegation controller address as allowed or disallowed.

### Parameters:

* `_delegationController` (address): The address of the delegation controller.
* `_allowed` (bool): Indicates whether the delegation controller is allowed or not.

***

<pre class="language-solidity"><code class="lang-solidity"><strong>function delegate(
</strong>    address _asset, 
    uint256 _id, 
    address _delegatee, 
    uint256 _duration
) external
</code></pre>

Delegates the usage of an asset to a delegatee for a specified duration.

### Parameters:

`_asset` (address): The address of the asset being delegated.

`_id` (uint256): The ID of the asset being delegated.

`_delegatee` (address): The address of the delegatee.

`_duration` (uint256): The duration of the delegation in seconds.

***

```solidity
function endDelegate(
    address _asset, 
    uint256 _id
) external;
```

&#x20;Ends the delegation of an asset.

### Parameters:

`_asset` (address): The address of the delegated asset.

`_id` (uint256): The ID of the delegated asset.

***

```solidity
function forceEndDelegation(
    address _asset, 
    uint256 _id
) external;
```

Forcefully ends the delegation of an asset by the protocol owner.

### Parameters:

`_asset` (address): The address of the delegated asset.

`_id` (uint256): The ID of the delegated asset.

***

```solidity
function delegateSignature(
    address[] calldata _assets, 
    uint256[] calldata _ids, 
    address _delegatee, 
    uint256 _duration
) external;
```

Delegates the usage of the signature to a delegatee for a specified duration, locking a group of assets.

### Parameters:

`_assets` (address\[]): An array of asset addresses being delegated.

`_ids` (uint256\[]): An array of asset IDs being delegated.

`_delegatee` (address): The address of the delegatee.

`_duration` (uint256): The duration of the signature delegation, expressed in seconds.

***

```solidity
function endDelegateSignature() external;
```

Ends the delegation of the signature, unlocking a group of assets.

***

```solidity
function execTransaction(
    address _asset, 
    uint256 _id, 
    address _to, 
    uint256 _value, 
    bytes calldata _data, 
    uint256 _safeTxGas, 
    uint256 _baseGas, 
    uint256 _gasPrice, 
    address _gasToken, 
    address payable _refundReceiver
) external returns (bool success)
```

Executes a transaction through the GnosisSafe wallet, validating the delegatee and allowed functions.

### Parameters:

`_asset` (address): The address of the delegated asset.

`_id` (uint256): The ID of the delegated asset.

`_to` (address): The destination address of the transaction.

`_value` (uint256): The amount of ETH to be sent with the transaction.

`_data` (bytes): The data payload of the transaction.

`_safeTxGas` (uint256): The gas limit for the transaction.

`_baseGas` (uint256): The base gas cost.

`_gasPrice` (uint256): The gas price used for the transaction.

`_gasToken` (address): The address of the token used for gas payment (0 for ETH).

`_refundReceiver` (address payable): The address that receives the gas payment refund.

### Returns:

A boolean indicating the success of the transaction execution.

***

```solidity
function isValidSignature(
    bytes memory _data, 
    bytes memory _signature
) public view override returns (bytes4);
```

Validates if a signature is valid based on the current signature delegation.

### Parameters:

`_data` (bytes): The hash of the signed data.

`_signature` (bytes): The signature bytes.&#x20;

### Returns:

The EIP1271 magic value if the signature is valid.

***

```solidity
function claimAsset(
    address _asset, 
    uint256 _id, 
    address _receiver
) external;
```

Sends an asset to a receiver if it is not delegated or locked.

### Parameters:

`_asset` (address): The address of the asset being claimed.

`_id` (uint256): The ID of the asset being claimed.

`_receiver` (address): The address of the receiver.

***

```solidity
function isAssetDelegated(
    address _asset, 
    uint256 _id
) external view returns (bool);
```

Returns if an asset is delegated or included in the current signature delegation.

### Parameters:

`_asset` (address): The address of the asset.

`_id` (uint256): The ID of the asset. Returns:

(bool): Indicates whether the asset is delegated or not.

***

```solidity
function isSignatureDelegated() 
external view returns (bool);
```

&#x20;Returns if the signature is delegated.

### Returns:

(bool): Indicates whether the signature is delegated or not.

***

```solidity
function isAllowedFunction(
    address _asset, 
    address _contract, 
    bytes4 _selector
) public view returns (bool);
```

Checks if a function is allowed to be executed by a delegatee of a given asset.

### Parameters:

`_asset` (address): The address of the delegated asset.

`_contract` (address): The address of the destination contract.

`_selector` (bytes4): The selector of the destination function.&#x20;

### Returns:

(bool): Indicates whether the function is allowed or not.

***

## Interactions:

* Interacts with the TransactionGuard contract to enforce delegation and locking rules.
* Utilizes the DelegationRecipes contract to determine allowed functions for asset collections.
* Integrates with the AllowedControllers contract to manage delegation and lock controllers.
* Executes transactions through the GnosisSafe contract.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://devs.unlockd.finance/unlockd-account-wallet/delegationowner.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
