# Set Token

The Set Token contract is an ERC20 token contract that allows privileged modules to make modifications to its positions and invoke function calls from the SetToken.&#x20;

## Select View Methods

### manager()

`function manager() view returns (address)`

Returns the manager of the SetToken.

| Return Name | Type    | Description                       |
| ----------- | ------- | --------------------------------- |
| manager     | address | Address of the SetToken's manager |

### getModules()

`function getModules() external view returns (address[] memory)`

Returns the list of modules a SetToken has enabled.

| Return Name | Type       | Description             |
| ----------- | ---------- | ----------------------- |
| modules     | address\[] | List of enabled modules |

### getPositions()

`function getPositions() public view returns (ISetToken.Position[] memory)`

Retrieves the positions in an array from the SetToken. A position definition is as follows:

```javascript
    /**
     * The base definition of a SetToken Position
     *
     * @param component           Address of token in the Position
     * @param module              If not in default state, the address of associated module
     * @param unit                Each unit is the # of components per 10^18 of a SetToken
     * @param positionState       The type of position denoted as a uint8
     * @param data                Arbitrary data
     */
    struct Position {
        address component;
        address module;
        int256 unit;
        uint8 positionState;
        bytes data;
    }
```

<table data-header-hidden><thead><tr><th>Return Name</th><th width="558.3333333333333">Type</th><th>Description</th></tr></thead><tbody><tr><td>Return Name</td><td>Type</td><td>Description</td></tr><tr><td>positions</td><td>Position[]</td><td>List of positions</td></tr></tbody></table>

### getComponents()

`function getComponents() public view returns (address[] memory)`

Returns the list of component assets in the SetToken.

| Return Name | Type       | Description        |
| ----------- | ---------- | ------------------ |
| components  | address\[] | List of components |

### getDefaultPositionRealUnit()

`function getDefaultPositionRealUnit(address _component) external view returns (int256)`

Returns the component real unit of a `Default` position.

| Parameter Name | Type    | Description                    |
| -------------- | ------- | ------------------------------ |
| \_component    | address | Address of the component asset |

| Return Name   | Type      | Description                                          |
| ------------- | --------- | ---------------------------------------------------- |
| componentUnit | int256\[] | Position real unit of the component (signed integer) |

### getExternalPositionRealUnit()

`function getExternalPositionRealUnit(address _component, address _positionModule) public view returns(int256)`

Returns the component real unit of an `External` position.

| Parameter Name   | Type    | Description                                     |
| ---------------- | ------- | ----------------------------------------------- |
| \_component      | address | Address of the component asset                  |
| \_positionModule | address | Module the external position is associated with |

| Return Name   | Type      | Description                                          |
| ------------- | --------- | ---------------------------------------------------- |
| componentUnit | int256\[] | Position real unit of the component (signed integer) |

### getTotalComponentRealUnits() <a href="#getexternalpositionrealunit" id="getexternalpositionrealunit"></a>

`function getTotalComponentRealUnits(address _component) external view returns(int256)`‌

Returns the total component real units of a position, summing the `Default` and `External`.

| Parameter Name | Type    | Description                    |
| -------------- | ------- | ------------------------------ |
| \_component    | address | Address of the component asset |

| Return Name   | Type      | Description                                          |
| ------------- | --------- | ---------------------------------------------------- |
| componentUnit | int256\[] | Position real unit of the component (signed integer) |


---

# 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://docs.indexcoop.com/index-coop-community-handbook/protocol/index-protocol/core-contracts/set-token.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.
