# Action Contracts

### Super vault specific action contracts

Just like with the `PRBProxy` you need a "target" contract to do anything meaningful with `MIMOProxy`. This is basically a collection of stateless scripts executing specific logic. In the case of super vaults there are 5 different action contracts (one for each functionality) :&#x20;

* [MIMOEmptyVault](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimoemptyvault.md)
* [MIMOLeverage](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimoleverage.md)
* [MIMORebalance](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimorebalance.md)
* [MIMOAutoRebalance](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimoautorebalance.md)
* [MIMOManagedRebalance](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimomanagedrebalance.md)

All actions on the SuperVault contracts require flash loans and DEX aggregator swaps, and to perform these actions, the contracts must have permission to call back the delegate call through the `MIMOProxy` `execute` function. This is because the action contracts interact with other contracts, such as the Mimo core protocol or DEX aggregators, within the same transaction and are executed within the context of the `MIMOProxy`.&#x20;

However, when the AAVE Pool contract performs a callback through the `executeOperation` function, the logic switches from the `MIMOProxy` context to the action contract's context, preventing any access-controlled actions on `VaultsCore`. To reenter the `MIMOProxy` context, the action contract must perform a callback by calling the `MIMOProxy` `execute` with itself as the target. For this to happen, the action contract must be granted the correct permission by the `MIMOProxy` owner.

<figure><img src="/files/8UewFe3EnxwjFxKAFtoV" alt=""><figcaption></figcaption></figure>

All of the above action contracts share 2 common struct passed in as arguments for flash loan and swaps :&#x20;

**`FlashLoanData`**

| Param Name    | Type    | Description                                              |
| ------------- | ------- | -------------------------------------------------------- |
| `asset`       | address | Asset to flash loan                                      |
| `proxyAction` | address | Address of the action contract performing the flash loan |
| `amount`      | uint256 | Flash loan amount                                        |

**`SwapData`**

| Param Name  | Type    | Description                                  |
| ----------- | ------- | -------------------------------------------- |
| `dexIndex`  | uint256 | Aggregator index in the `DexAddressProvider` |
| `dexTxData` | bytes   | Off chain route fetched from aggregator API  |

### Non super vault specific action contracts

The `MIMOProxy` also comes with non super vault specific action contracts :&#x20;

* [MIMOProxyActions](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimoproxyactions.md)
* [MIMOVaultActions](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimovaultactions.md)


---

# 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.parallel.best/developers-hub/parallel-v2/super-vault-sv/action-contracts.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.
