> For the complete documentation index, see [llms.txt](https://docs.indexcoop.com/index-coop-community-handbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.indexcoop.com/index-coop-community-handbook/protocol/index-protocol/core-contracts/set-token.md).

# 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) |
