# Key Roles

## Admin

Our Lender, Redeemer and MarketPlace contract rely on an `admin` to control certain aspects. They are described on a contract basis below.

### Lender

In the Lender contract, the `admin` has the following privileges:

* `approve`: the admin is responsible for executing the approval of the redeemer contract. This is necessary to facilitate the usage of Principal Tokens by the Redeemer
* `setAdmin`: the admin is the only one that can transfer admin powers
* `setFee`: the admin can see a fee rate. This fee rate has a minimum value (which limits the amount of fees extracted per transaction)
* `setMarketPlace`: the admin can set the MarketPlace contract
* `scheduleWithdrawal` and `scheduleFeeChange`: the admin can schedule these actions (there is a 3 day holding period)
* `blockWithdrawal` and `blockFeeChange`: the admin may block fee changes and withdrawals
* `withdrawFee`: the admin may withdraw fees from the contract. The amount extractable from the contract is limited by the `fees` mapping
* `withdraw`: the admin may withdraw the entire balance of the token (this is an emergency measure)
* `pause`: the admin may pause certain markets. This may be necessary in the event that an integrated principal token experiences insolvency or their own pauses

### Redeemer

In the Redeemer contract, the `admin` has the following privileges:

* `setAdmin`: the admin is the only one that can transfer admin powers
* `setMarketPlace`: the admin can set the MarketPlace contract
* `setConverter`: the admin can set the Converter contract
* `setLender`: the admin can set the Lender contract
* `setFee`: the admin can see a fee rate for automatic redemptions. This fee rate has a minimum value (which limits the amount of fees extracted per transaction)
* `pauseRedemptions`: the admin may pause the redemption process. This is an emergency measure

### MarketPlace

In the MarketPlace contract, the `admin` has the following privileges:

* `createMarket`: the admin can create new markets
* `setPrincipal`: the admin can add principal tokens to a market if one has not already been set for the protocol
* `setPool`: the admin can set a Yield Space Pool for swapping Illuminate principal tokens and the underlying
* `setAdmin`: the admin is the only one that can transfer admin powers

## Lenders

These are the users of the protocol. They will be able to use Illuminate to arbitrage fixed rates markets and lend conveniently via our protocol and API.

### Lender

* `lend`: this method will swap underlying assets for Illuminate's principal tokens in a given market
* `mint`: this method will mint Illuminate principal tokens in exchange for principal tokens
* `batch`: this method allows the user to chain multiple `lend` and `mint` calls together efficiently

### Redeemer

* `redeem`: this method allows the user to swap their Illuminate principal tokens for the underlying asset after maturity

### MarketPlace

* `sellPrincipalToken`: allows user to swap Illuminate principal tokens for the underlying asset prior to maturity
* `buyPrincipalToken`: allows user to swap underlying tokens for Illuminate principal tokens
* `sellUnderlying`: allows user to swap underlying tokens for Illuminate principal tokens
* `buyUnderlying`: allows user to swap Illuminate principal tokens for underlying tokens
* `batch`: this method allows the user to chain multiple swap methods together efficiently

###


---

# 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.illuminate.finance/smart-contracts/key-roles.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.
