# Introduction

## Why Develop Autopools?

**Providing liquidity in DeFi, particularly to correlated trading pairs such as ETH LSTs/LRTs and stablecoins on decentralized exchanges (DEXs), or to lending markets like AAVE, Fluid, and Morpho, can be an extremely efficient onchain way to earn additional yield on one's assets. Despite this, it comes with many complexities to achieve that efficiency.** \
\
Autopools were developed to address the many challenges liquidity providers (LPs) face when optimizing for best performance. No protocol currently offers fully autonomous, transparent and sophisticated rebalance solution focused solely on liquidity provision.\
\
This dedicated approach offers great value not only to LPs, but also to a wide range of other ecosystem participants, making providing liquidity accessible.

## The Status Quo for LPs

**Liquidity providers face a highly complex decision-making process when seeking to optimally rebalance their LP positions.** It requires an LP to account for a complex set of factors, including but not limited to:

* *variance of yields and their composition;*
* *different fee and reward systems;*
* *offsetting various costs such as gas, slippage, and trading fees;*
* *different AMM models.*

Differentiating between AMM models warrants highlighting, as its complexity is an often neglected core challenge of manual liquidity provision. \
\
Additional factors complicating the process include the significant amount of time LPs must spend researching opportunities and interacting with multiple protocols, making the process time-consuming and cumbersome. \
\
Even without considering these problems, the high costs of rebalancing and compounding often lead to underperformance and can prevent LPs from participating altogether.


# Autopools tl;dr

## **A New Way to LP**

**The Auto Pools protocol, a novel LP Aggregator, unlocks a new way to LP through automated yield optimization.**\
\
Users deposit assets into an autopool, each representing a set of potential deployment destinations for the autonomous rebalance logic.&#x20;

From there, the Autopool Rebalance Logic takes over, autonomously monitoring the underlying pools and leveraging its powerful framework to rebalance – thus abstracting the complexity associated with rebalancing, compounding, and staking of LP tokens away from the user.\
\
The autopool receipt tokens (e.g., autoETH) are yield-bearing and can be seamlessly integrated across DeFi.

### Effortless Access to LP Optimization

The user experience is simple:

1. LP chooses an autopool, deposit any asset via a simple, gas-optimized transaction and gets back the yield-bearing receipt token (e.g. autoETH)
   1. The autopool monitors the underlying destinations and rebalances
   2. Rewards auto-compound back into the autopool
2. LP uses Dashboard to keep track of the autopool's performance and other metrics

Providing liquidity to a set of destinations becomes as simple as swapping tokens or making a simple deposit.

> **"What DEX aggregators did for traders, autopools are doing for LPs."**

Learn more about using autopools in the [App Guide.](/using-the-app/app-guide)


# Auto-Rebalancing

### How Autopools Auto‑Rebalances Between DeFi Destinations

Autopools spread your deposit across a curated set of pools and protocols (we call these **destinations**) and **adjusts** that mix as conditions change. When a different destination looks better **after** accounting for costs like swaps, the autopool shifts only what makes sense.

**What’s happening under the hood:**

* It continuously **monitors** yield signals and market conditions.
* It **compares** potential improvements vs. the cost of moving.
* It **moves** only when the expected benefit outweighs the costs.

> **Autopools mean you're not getting chopped up!**\
> You’re not stuck in yesterday’s “best pool,” and you’re not paying churny fees. Rebalances aim to be **infrequent but meaningful**.

**A single deposit, and the autopool takes it from there: monitoring, comparing, and only moving when it's worth it.**&#x20;

**FAQs**

* **How often does it rebalance?** Only when the improvement is meaningful net of costs. There’s no fixed cadence; it’s opportunity‑driven.
* **Will it ever move everything at once?** Usually not; it prefers measured shifts to keep costs and slippage low.
* **Who pays the transaction costs?** Costs are part of the decision logic—rebalances simply won’t happen unless the expected benefit clears those costs.


# Yield Optimizing

### How the Autopool Protocol Optimizes Across Destinations for Better Yield

Each **autopool** has a pre‑selected **set of eligible destinations** (these can be DEXs, lending protocols, and soon yield markets). The rebalance logic scores those options using a blended view of return **and** cost—headline APRs, fees, rewards, available liquidity, and the “hidden” stuff like volatility and potential impermanent loss.

Instead of chasing whatever advertises the highest APY today, the logic aims to **beat any single venue over time** on a risk‑aware basis.

\
*The goal is steady, risk‑aware outperformance, not whiplash‑inducing APY chasing.*<br>

**FAQs**

* **How are destinations chosen?** They’re curated for fit (asset type, liquidity depth, integrations, historical behavior) and continuously reviewed.
* **Do you add new destinations?** On occasion, when they meet safety and strategy criteria. Generally only battle tested destinations are chosen.&#x20;
* **More autopools are continually being added, so check back frequently.**&#x20;


# Auto-Compounding

### How Deposits Auto‑Compound

When your autopool position earns fees or rewards, they are **automatically reinvested** back into the position. This creates a simple “earn → reinvest → repeat” loop — what is generally known as **compounding**.

> **Let the autopool do the hard work for you:**\
> Less busywork (no manual claiming, swapping, and redepositing), fewer missed reward windows, and more time with your full balance working for you.

Gas cost will no longer restrict you from compounding your gains, as you are now swimming along with everyone else in the pool.

**FAQs**

* **Do I need to claim rewards?** Rewards from destinations are handled automatically by the strategy. Additional incentives, such as in the form of $TOKE, do need to be manually claimed.&#x20;
* **How often does compounding happen?** On a periodic basis and/or alongside rebalances; timing is tuned to minimize costs and maximize net benefit.
* **In what asset are rewards reinvested?** Back into the autopool’s strategy so your position grows in place.


# Dashboard and Tracking

<figure><img src="/files/0BLXZY8GhL2HL50uPl49" alt=""><figcaption></figcaption></figure>

### Easy Tracking with the In‑App Dashboard

The dashboard gives you clarity at a glance so you always know **what you own, where it’s deployed, and how it’s doing**—without spelunking through multiple protocols.

**What you’ll see:**

* **Current allocation** — your destinations and percentages right now.
* **Performance** — earned to date and recent changes, net of moves.
* **One‑click actions** — add more or withdraw whenever you want.

> **Tip**\
> You can change the denomination of your portfolio where it says "Currency," e.g. show it denominated in USD, ETH, etc.&#x20;

**FAQs**

* **How fast does it update?** Updates happen in near real-time.&#x20;
* **Mobile friendly?** Check out the app on your mobile phone - it's optimized to work well there too.&#x20;


# Protocol Mechanics

## Design Goals

The purpose of the Autopool Protocol is to continuously rebalance assets into destinations with the best risk-return profiles, aiming to outperform any individual destination included in the autopool over the long term. Earnings are auto-compounded back into the autopool and subsequently rebalanced.\
\
To achieve this, the autopool's rebalance logic does not merely chase the highest advertised yield but instead processes a comprehensive set of data, applies sophisticated logic, and adheres to safety constraints. \
\
This section will provide an accessible overview of the system's general architecture and essential features.

## Components & Logic

This section provides a simplified overview of the components, their functions within the Autopool Protocol, and a summary of the rebalance logic to help users achieve a basic understanding of the autopools.

[Read more](/auto-pools-protocol/protocol-mechanics/components-and-logic)

## Asset Flow Example

To understand the general architecture and functioning of the system, it helps to consider a simplified flow of assets within the system

[Read more](/auto-pools-protocol/protocol-mechanics/asset-flow-example)


# Components & Logic

This section provides a simplified overview of the components, their functions within the Auto Pools Protocol, and a summary of the Rebalance Logic to help users achieve a basic understanding of the autopools.

For a comprehensive breakdown of the system, its components, and functionality, please refer to the [Developer docs](/developer-docs/contracts-overview).

## System Components

Individual autopools, when viewed as a system and not as a product or concept, are comprised of multiple components that as a whole fulfill the purpose of continuously rebalancing assets from the autopool into the destinations with the best risk/return profile.

<figure><img src="/files/kXYk2InOnbaKR02NGCzC" alt=""><figcaption><p>Schematic overview with highlighted asset flow</p></figcaption></figure>

{% tabs %}
{% tab title="Autopool" %}

#### Modular Option Set

Autopools are the system component which the user interacts with directly by depositing and withdrawing the base asset, the autopool returning the depositor a receipt token. \
\
Autopools use the ERC-4626 standard and represents a fixed set of destinations (pools and DEXs) to which assets may be deployed to.&#x20;
{% endtab %}

{% tab title="Stats System" %}

#### Providing Data

The Stats System is responsible for making various signals available on-chain and keeping the destination data up-to-date. These signals are then stored and processed by “calculators” that are kept up to date through a keeper network.\
\
Other system components rely on the data to get an accurate picture of the destination (e.g. trading fees).
{% endtab %}

{% tab title="Solver" %}

#### Finding the Solution

Simply put, the Solver is an off-chain component that listens to opportunities to rebalance into higher yielding destinations and finds the path and timing for rebalances, which it proposes to the Strategy for validation.\
Inversely, it will also solve for and propose solutions to rebalance out of destinations that violate safety constraints.\
\
This is similar to how off-chain swap routing software (DEX aggregators) will find and split up trades between many pools to get the best price.&#x20;
{% endtab %}

{% tab title="Strategy Contract" %}

#### The Gatekeeper

The Strategy is a set of gatekeeping contracts responsible for determining if a given rebalance proposal meets its requirements and is in the best interest of an autopool. Additionally, the Strategy will ensure that the immutable constraints are not violated.
{% endtab %}
{% endtabs %}

***

## Rebalance Logic

This explanation will highlight a few of the components and steps necessary to arrive at a valid rebalance solution.&#x20;

### The Data

**The logic does not simply chase the highest yield**, but processes a comprehensive set of data in order to attain long-term rather than short-term outperformance. The Stats System is collecting, storing and processing this data, for example:

* APR and it's different components:
  * ETH Staking Yield: ETH yield generated by Consensus and Execution Layer rewards
  * Fee APR: Yield generated from swap fees
  * Incentive APR: Additional rewards paid to liquidity providers
* Price return:
  * Exchange rate vs underlying ETH backing
* Rebalancing costs:
  * Gas fees
  * Slippage
  * Trading fees

The above factors are weighted in order to account for e.g. likelihood of APR stability. \
More detail on the different yield types and APR weights can be found [here](/developer-docs/contracts-overview/autopool-eth-contracts-overview/autopool-contracts-and-systems/autopool-strategy).&#x20;

### Solution and Constraints

Based on the data made available by the Stats System, the Solver proposes rebalance solutions to interchangeably convert assets and LP tokens, as well as LP token into other LP tokens. The rebalance solutions are proposed to the Strategy backing the autopool. \
\
The Strategy verifies on-chain the validity of the proposal and adherence to immutable constraints, also by use of the Stats System's data. Among the strategy’s key features we have the following:

* **Composite Return Metric** - The Composite Return Metric is a score associated with destinations for liquidity within autopools. This metric breaks down APRs into separate parts. As such, the rebalance logic has the flexibility of overweighting/underweighting different components for further optimization. A valid rebalance needs to observe an increase of this metric.
* **Adaptive Rebalance Offset Period** - The adaptive rebalance constraint is a gatekeeping condition for rebalances, which states that the expected return associated with a rebalance needs to be recouped over a given period. It is worth noting that this is a self-learning mechanism with a variable cost offset period that adapts to different market environments based on the observed yield volatility.

Lastly, the Strategy has a multitude of additional immutable constraints, such as the total slippage (i.e. total difference in the value of the in and out LP tokens), as well as lookback tests that validate an increase in net asset value (NAV) over time.\
\
Once fully validated by the Strategy, the rebalance proposal is executed.<br>


# Asset Flow Example

To understand the general architecture and functioning of the system, it helps to consider a simplified flow of assets within the system:

1. **Deposit** – User deposits assets into an autopool. After this action, the autopool has idle assets and the user gets the respective receipt token in return;
2. **Rebalance** – After a certain threshold of assets are deposited into the autopool, the Strategy backing it starts to accept proposals from the Solver. Once a proposal satisfies the constraints imposed by the Strategy, the assets in the autopool are sent to the Solver which will then return LP tokens to the autopool;
3. **Auto-compounding** – On a periodic basis, rewards from destinations are claimed and collected via a keeper process. These tokens are then converted into the autopool base asset;
4. **Debt Reporting** – Each autopool goes through a debt reporting where the system re-values the LP tokens held by that autopool. During that process, any available auto-compounded rewards are claimed and come into the autopool as idle funds;
5. **Restart** – With sufficient idle assets in the autopool, another rebalance can occur.&#x20;

In other words, users deposit assets into autopools, the stats contracts provide on-chain information about the market, and the solver proposes rebalances to the strategy. To be accepted, the proposed rebalance must meet the strategy's constraints.\
\
The above outline focused on idle → LP rebalances but the rebalance step can occur for LP → LP rebalances as well. So long as the proposal results in a higher potential return (and satisfies other constraints) it can be executed.


# Autopool Receipt Tokens

## Enter the Auto Pools Protocol

Users gain access to autonomous LP optimization by depositing into an autopool, which use the highly composable ERC-4626 standard and can be configured with a set of destinations (pools/DEXs and lending markets for some autopools) to which assets may be deployed to. \
\
Assets deposited into an autopool are not subject to any lock ups or cooldown periods, meaning that users can withdraw their funds at any time.\
\
The architecture was designed to be modular, allowing for plug-and-play integration of new assets and destinations. As a result, the system can adapt to the market swiftly by launching autopools which include e.g. a new pairings, or cater to specific ecosystems.

***

## Composable Receipt Tokens

LPs depositing into an autopool receive reward bearing receipt tokens, which are composable across DeFi. Examples of common DeFi integrations include utilizing receipt tokens as collateral, integration into yield marketplaces to trade liquidity rates, and leverage them.

<figure><img src="/files/DyB4jDA4TJoqQBZBmyxR" alt=""><figcaption><p>LATs are tokenized of the underlying option set of destinations</p></figcaption></figure>


# Staking AUTO

**Token update:**

{% hint style="info" %}
Tokemak’s legacy **TOKE** token has migrated to **AUTO**. Where older materials mention TOKE or sTOKE, the current equivalents are **AUTO** and **sAUTO**. Migration from TOKE to AUTO is available 1:1 through the official Auto Finance app [here](https://app.auto.finance/auto), and AUTO staking now uses a single 16-week lock in **sAUTO**. Some legacy reward references may still appear temporarily during the transition.

#### Migration note

* **TOKE → AUTO** migrates at **1:1**
* **sTOKE / accTOKE → sAUTO** migrate at **1:1**
  {% endhint %}

### Introduction

The sAUTO system is Auto Finance's staking mechanism that enables active ecosystem participation. By staking AUTO, users receive credits that they can allocate to different Autopools. This allocation provides access to both reward streams and, when available, additional incentives specific to each Autopool.

## Staking Mechanism

### Staking AUTO

AUTO staking is the current staking system for the protocol.

When you stake **AUTO**, you receive **sAUTO**, which represents your staked position. AUTO staking is designed to keep the experience simple: users stake into a single system, follow one standard lock structure, and participate in protocol-aligned rewards through the current reward model.

#### How it works

* Stake **AUTO** through the app
* Receive **sAUTO**
* Remain staked through the current **16-week** staking structure
* Earn rewards based on the current staking and protocol revenue model

#### FAQs

* **What do I receive when I stake AUTO?** You receive **sAUTO**.
* **How long is the staking period?** The current staking model uses a **16-week lock**.
* **Can I still migrate TOKE?** Yes. Legacy TOKE can still be migrated to AUTO 1:1.
* **Do I still direct rewards to specific Autopools?** No. The current system uses a simplified reward structure.

Learn how to claim your rewards [here](/using-the-app/app-guide/staking-auto/claim-auto-staking-rewards).

\
\ <br>


# Custom Autopools

## Ecosystem Specific Autopools

Autopools are in essence customizable networks of automated liquidity, tokenized and made composable by their respective receipt token. This allows for a new way to combine utility with distribution. \
\
For instance, an autopool tailored for the XYZ DEX, featuring a custom selection of pools (e.g., correlated ETH pairs), which then distributes branded receipt tokens (e.g., xyzETH) to LPs.\
Once set up, the user experience is simple: provide ETH, receive xyzETH, and the underlying liquidity remains optimally deployed, while remaining within the DEX ecosystem. \
This approach creates passive yield opportunities for users, which retain all underlying liquidity within a single ecosystem, thus promoting sticky liquidity and broadening the addressable market.

<figure><img src="/files/H1etMUtCljaMNcsg0Twa" alt=""><figcaption><p>Example of a DEX specific Autopool</p></figcaption></figure>

## The Future of Autopools

A natural next step is to enable the permissionless creation of autopools. This feature will allow users to express individual risk preferences and allows different participants, such as risk managers, to contribute specialized skills. \
\
The architecture of autopools also allows to develop solutions for other problem sets requiring optimization, such as e.g. point systems.


# Glossary

Important terms to know:

<table><thead><tr><th width="195">Term</th><th>Definition</th></tr></thead><tbody><tr><td>Autopool</td><td>An <a href="https://ethereum.org/en/developers/docs/standards/tokens/erc-4626/">ERC-4626</a> Tokenized Vault Standard pool within which user assets are deposited, which contains various different external destination contracts. Example destination contracts would be a Balancer or a Curve pool. </td></tr><tr><td>autoLP</td><td>Automated Liquidity Provision, used in reference to the network capabilities of assets deposited into Autopools and their corresponding yield bearing tokens</td></tr><tr><td>autoETH</td><td>autoETH is the yield-bearing Autopilot receipt token (also referred to as LAT) received after depositing ETH (or Wrapped ETH) into Autopilot's first Autopool, focused on LST-centric destinations. </td></tr><tr><td>autoLRT</td><td>autoLRT is a yield-bearing Autopilot receipt token for an LRT-based Autopool. </td></tr><tr><td>LP</td><td>Liquidity Provider, user who provides tokens as trading liquidity to exchanges. In the context of Autopilot, an LP is a participant that supplies ETH (or otherwise) to an Autopool. </td></tr><tr><td>Receipt Token</td><td>LPs receive receipt tokens (e.g., autoETH) upon deposit into an autopool. In essence, receipt tokens are tokenized automated liquidity networks backed by LP positions. They enable a new kind of composability within DeFi, as a standalone token representing optimally deployed underlying liquidity. </td></tr><tr><td>LST</td><td>Liquid staking tokens (LST) are tokenized ownership claims on the ETH staked on the Consensus layer, such as stETH or rETH. </td></tr><tr><td>LRT</td><td>A liquid restaking token (LRT) is a token that gives users access to liquidity while participating in restaking. </td></tr><tr><td>Rebalance Logic</td><td>Comprised of a series of smart contracts, the Rebalance Logic is the primary system of the Auto Pools Protocol that rebalances between a subset of given autopool destinations. </td></tr><tr><td>Solver</td><td>The Solver is an off-chain component that proposes rebalance solutions to interchangeably convert assets and LP tokens, as well as LP token into other LP tokens. The rebalance solutions are proposed to the Strategy, once they satisfy the Strategy’s imposed on-chain constraints a rebalance takes place.</td></tr><tr><td>Strategy</td><td>The Strategy contract is responsible for determining if a given liquidity rebalance is in the best interest of an autopool.</td></tr><tr><td>Rebalance</td><td>A deployment that occurs when: Idle assets move to a Destination, assets move from one Destination or another, or assets move from a Destination back to the idle state.</td></tr><tr><td>Destination</td><td>A liquidity pool within an autopool set that may be the destination venue of a potential asset rebalance. </td></tr></tbody></table>


# App Guide

This guide contains all the information necessary to interact with all aspects of Auto Finance.

## Autopools&#x20;

Learn how to provide liquidity with Autopools and take advantage of their powerful LP optimization.

[Read more](/using-the-app/app-guide/autopools)

## Staking AUTO

Stake **AUTO** to receive **sAUTO** and participate in the protocol’s current staking and reward system. This section walks through staking, viewing positions, managing withdrawals, and understanding rewards in the app.

[Read more](/auto-pools-protocol/staking-auto)

## AUTO/ETH LP

AUTO/ETH is now a Uniswap v4 pool, migrated from the old TOKE/ETH Sushiswap LP.&#x20;

[Read more](/using-the-app/app-guide/auto-eth-lp)


# Autopools

A list of available autopools can be found in the "Autopools" section on tokemak.xyz. Select an autopool in order to see detailed information and data associated with the specific autopool, such as historical performance, underlying pools and assets etc. From here you are also able to interact with the pool:

## Deposit and Withdraw

Learn how to deposit into the autopool and earn more pool shares.

[Read more](/using-the-app/app-guide/autopools/deposit-and-withdraw)

## Stake and Unstake

Stake your receipt token for additional incentives.

[Read more](/using-the-app/app-guide/autopools/stake-and-unstake)

## Claim Incentives

Claim TOKE incentives and lock them for more autoETH pool shares.

[Read more](/using-the-app/app-guide/autopools/claim-incentives)

## View Positions

Use the dashboard to track your portfolio and manage your autopool positions and TOKE locks.

[Read more](/using-the-app/app-guide/autopools/view-positions)


# Deposit and Withdraw

## Depositing into an Autopool <a href="#how-do-i-supply" id="how-do-i-supply"></a>

Browse to the "Autopools" section to select an autopool and view additional details by clicking on it. Once you are ready, use the dialog box to deposit into the autopool:

1. If your wallet is not connected to tokemak.xyz, or you need to connect to a different network for this autopool, the main button of the dialog will prompt you to do so by clicking it.<br>

<figure><img src="/files/C6xptyuWmvMQqmr5PXaU" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/CtqBnvMVgabEPyy9WpEL" alt=""><figcaption></figcaption></figure>

2. Select the asset and amount you wish to deposit. You can deposit any asset, which will subsequently be swapped into the base asset of the autopool (e.g. , ETH). \
   You can select a specific slippage tolerance for the swap and deposit by clicking the cog icon.
3. Setting the "Auto-Stake" toggle to "on" will add the transactions to stake the receipt token to the deposit transaction. If left in the "off" position, you will receive the receipt tokens into your wallet. These can always be staked at a later point.
4. Click "Deposit" in order to start the deposit process. Note that the first deposit of an asset will require an additional approval transaction.

## Withdrawing from the Autopool

Autopool deposits are not subject to lock-ups or cool-down periods, meaning you can withdraw your assets at any time. You can start the process by either clicking "Manage" in the autopools of the "Portfolio" section, or by selecting the autopool from the list in the "Autopools" section.

{% hint style="info" %}
Before withdrawing from the autopool, ensure you have a sufficient unstaked balance of receipt tokens. If your tokens are currently staked, you'll need to unstake them first. For detailed instructions on unstaking, refer to the "[Stake and Unstake](/using-the-app/app-guide/autopools/stake-and-unstake)" section of our guide.
{% endhint %}

1. Select the "Withdraw" tab of the dialog.
2. Select the amount you wish to to withdraw and the asset you want to receive. You can withdraw as any asset; the system will make the swap for you. You can select a specific slippage tolerance for the withdrawal and swap by clicking the cog icon.
3. Click "Withdraw" to start the withdrawal process.&#x20;


# Stake and Unstake

## Staking Autopool Receipt Tokens <a href="#how-do-i-supply" id="how-do-i-supply"></a>

In case you have unstaked receipt tokens that you wish to stake, navigate to the respective Autopool. If you are unsure about the Autopool or the status of your positions, you can browse your "Portfolio" section and check the Staking Status:

<figure><img src="/files/NulKiiDFTwsfzF0f2lNL" alt=""><figcaption></figcaption></figure>

* **Staked:** All the receipt tokens associated with this Autopool position have been staked.
* **Partially Staked:** Receipt tokens associated with this position have partially been staked.
* **Unstaked:** No receipt tokens associated with this Autopool position have been staked.

Click on "Manage" and you will be taken to the Autopool where you can use the dialog to stake your receipt tokens.&#x20;

1. Select the "Stake" tab in the dialog.
2. Enter the amount you wish to stake and click "Stake." Note that the first staking transaction  will require an additional approval transaction.
3. Confirm the transaction(s) in your wallet.

{% hint style="info" %}
The app offers an option to auto-stake receipt tokens upon depositing assets into an Autopool. You can find more information in the "[Deposit and Withdraw](/using-the-app/app-guide/autopools/deposit-and-withdraw)" section of the guide.
{% endhint %}

## Unstaking Autopool Receipt Tokens <a href="#how-do-i-withdraw" id="how-do-i-withdraw"></a>

In order to withdraw from the Autopool or otherwise utilize your receipt tokens, you will need to unstake them. Either navigate to the Autopool via the 'Autopools' section or select it from your Portfolio view.

1. Select the "Unstake" tab in the dialog.
2. Enter the amount you  wish to unstake and click "Unstake."
3. Confirm the transaction(s) in your wallet.


# Claim Incentives

## What Are Incentives and How Are They Calculated? <a href="#what-is-the-incentive-for-staking" id="what-is-the-incentive-for-staking"></a>

Autopool LPs who stake their  receipt tokens currently receive additional TOKE rewards, allocated every two weeks. A defined amount of TOKE is distributed pro rata among LPs, based on the total percentage of the total staked receipt tokens they represent.&#x20;

The amount of rewards and the split across the different pools is subject to change.

## How Do I Claim and Manage My Incentives? <a href="#how-do-i-start-staking" id="how-do-i-start-staking"></a>

Navigate to your Portfolio and locate the "Autopools" section. Under "Rewards," click "Claim" to initiate the claim process. During this process, you can choose either to compound your TOKE incentives to earn autoETH or to claim liquid TOKE directly to your wallet.

### Compound Claim&#x20;

Compound Claim will lock your claimed TOKE for four weeks, earning additional autoETH receipt tokens. These tokens are the same as the LP receipt tokens you receive for depositing into the autoETH autopool.\
You can learn more about TOKE locking [here](/using-the-app/app-guide/staking-auto).

### Basic Claim

Basic Claim allows you to claim liquid TOKE directly to your wallet. Liquid TOKE can, for example, be used to provide liquidity to the TOKE/ETH pools on SushiSwap or Curve. \
Learn more about TOKE/ETH LP [here](/using-the-app/app-guide/auto-eth-lp).


# View Positions

## Where can I see my Autopool Positions? <a href="#what-is-the-incentive-for-staking" id="what-is-the-incentive-for-staking"></a>

All your positions can be found in the "Portfolio" section.

{% hint style="info" %}
You can also see your position on detail page of the autopool you have deposited into (eg. autoETH or balETH).
{% endhint %}

## Total Autopools Balance <a href="#what-is-the-incentive-for-staking" id="what-is-the-incentive-for-staking"></a>

This is your total balance across all your autopool positions.

## Autopool Allocations <a href="#what-is-the-incentive-for-staking" id="what-is-the-incentive-for-staking"></a>

Here you can see the allocation to DEXs and assets across all autopools you have deposited into.

## Autopools <a href="#what-is-the-incentive-for-staking" id="what-is-the-incentive-for-staking"></a>

Here you can track and manage your individual positions.

* **Total Autopools Balance: T**otal balance across all autopools.
* **Total Returns:** Total cumulative return across all autopools.
* **Average Daily Returns:** Average return across all autopools. High daily Composite Return Metric, 7-day moving average, 30-day moving average depending on autopool age.
* **Average APR:** Average APR across all autopools. High daily Composite Return Metric, 7-day moving average, 30-day moving average depending on autopool age.
* **Rewards:** Current balance of additional earned rewards.
* **TVL:** Total Value Locked of the autopool.
* **Deposited:** Cumulative deposits made into the autopool.
* **Returns:** Total cumulative return earned in the autopool.
* **APR:** APR of the autopool. High daily Composite Return Metric, 7-day moving average, 30-day moving average depending on autopool age.

### Staking Statuses <a href="#is-there-a-minimum-or-maximum-amount-to-supply" id="is-there-a-minimum-or-maximum-amount-to-supply"></a>

You can see your stake status under the portfolio on the autopool section.

<figure><img src="/files/hqhzKMHRucOUJtUsX4xY" alt=""><figcaption></figcaption></figure>

* **Staked.** Your amount of receipt token stake is the same as the total amount of your position.
* **Partially Staked.** Your amount of  receipt token stake is no the total amount of your position.
* **Unstaked.** You do not have staked  receipt tokens.

### How Do I Manage My Autopool Positions?

In your Portfolio, click on the 'Manage' button to go to the specific autopool page, where you can manage your autopool position:

* Deposit / Withdrawal
* Stake / Unstake


# Staking AUTO

### Staking Fundamentals

Staking AUTO is straightforward.

#### To stake AUTO

1. Open the staking section in the app.
2. Connect your wallet.
3. Enter the amount of **AUTO** you want to stake.
4. Review the staking details, including the current lock structure.
5. Confirm the transaction.

After staking, you will receive **sAUTO**, which represents your staked position.

> **What changed from the old system?**\
> Older versions of the docs may reference choosing a lock duration, reviewing a boost multiplier, or allocating credits to specific Autopools. Those steps are part of the legacy TOKE-era design and are no longer the core staking flow.

Once your transaction is confirmed, your staking position will appear in the app and your rewards will accrue according to the current staking model.

#### FAQ

* **Do I need to allocate rewards after staking?** No. The current staking model is more streamlined and does not require the old pool-by-pool allocation flow.
* **What do I receive after staking?** You receive **sAUTO**.

***

## Unstake and Withdraw

Learn how to unstake and withdrawing your AUTO

[Read more](/using-the-app/app-guide/staking-auto/unstake-and-withdraw-auto)

## Claim AUTO Staking Rewards

Learn how to claim your revenue streams AUTO rewards.

[Read more](/using-the-app/app-guide/staking-auto/claim-auto-staking-rewards)

## View AUTO Staking Positions

You can see your staking positions on the Portfolio or under each of the Revenue Markets.

[Read more](/using-the-app/app-guide/staking-auto/view-auto-staking-positions)


# Unstake and Withdraw AUTO

### Unstake and Withdraw AUTO

You can manage withdrawals for your staked position directly in the app.

#### To begin a withdrawal

1. Open the staking section.
2. Select your **sAUTO** position.
3. Review the withdrawal timing and current lock status.
4. Submit the withdrawal request when your position becomes eligible.

#### To complete a withdrawal

Once the unlock process is complete, return to the app and finalize the withdrawal to receive your **AUTO** back in your wallet.

> **Helpful note**\
> The exact timing of when you can request or complete a withdrawal depends on the current staking schedule shown in the app.

#### FAQ

* **Do I receive AUTO or sAUTO when I withdraw?** You receive **AUTO** back when the withdrawal process is completed.
* **Where should I check my timing?** The app shows the current status of your position and when the next withdrawal step is available.

{% hint style="info" %}
Your stake will automatically renew for the same duration if you do not initiate unstaking during the designated unstaking window.
{% endhint %}


# View AUTO Staking Positions

The staking dashboard gives you a simple view of your current **sAUTO** position.

#### What you can track

* your current staked balance
* reward status
* withdrawal timing
* recent staking activity

This view is designed to make it easy to understand your staking position without needing to track multiple moving parts manually.

> **Tip**\
> If you are migrating from the legacy TOKE system, this is the best place to confirm that your updated staking position appears correctly in the app.

#### FAQ

* **What token should I expect to see here?** Your staked position should appear as **sAUTO**.
* **Can I manage older TOKE allocations here?** Legacy staking concepts such as credit allocation may still appear in archived materials, but the current experience is centered on sAUTO positions.


# Claim AUTO Staking Rewards

The app makes it easy to view and claim rewards associated with your **sAUTO** position.

#### To claim rewards

1. Open the staking section.
2. Navigate to your rewards view.
3. Review any rewards currently available to claim.
4. Confirm the claim transaction.

> **Good to know**\
> Legacy TOKE-era reward messages or screenshots may still appear in archived materials. The current staking system is based on **AUTO** and **sAUTO**.

#### FAQ

* **What kind of rewards do sAUTO holders earn?** Rewards are tied to the current protocol reward model and staking design.
* **Do I need to vote rewards to a specific pool?** No. The simplified staking system no longer uses the old pool-by-pool reward voting flow.


# AUTO/ETH LP

Migrate your TOKE LP positions from Sushiswap to Uni V4 to keep earning rewards on your liquidity position. [here](https://app.auto.finance/auto).

Earn AUTO incentives by holding a full-range ETH/AUTO liquidity position on Uniswap V4. No staking required. Rewards typically appear within 2-8 hours, and a claim button will show when you have rewards available. Explore the Uniswap v4 pool [here](https://app.uniswap.org/explore/pools/ethereum/0xc41ab7da3d68aee076df71ef0f7a4665abdb8d5a9bc72c17ac86b61fadb89846).


# Guarded Launch Rewards

## Claim autoETH Rewards

To claim your autoETH, you can go to the "Staking" section.


# With Wallet Services

Enterprise-grade wallet-as-a-service platforms can require additional setup or configuration to work with the Autopilot contracts and user interface. These guides will illustrate the setup for some of the most common platforms:

{% content-ref url="/pages/kZK3SnXHQo3XqapvgMzp" %}
[Fireblocks](/using-the-app/with-wallet-services/fireblocks)
{% endcontent-ref %}


# Fireblocks

Fireblocks is a highly configurable wallet-as-a-service that provides users many protections while transacting on a blockchain. Depending on the settings of your wallet, you may need additional configuration or transaction policy updates to be able to fully utilize the Autopilot UI.

{% hint style="info" %}
Please note: These instructions are only a guide. You should only make changes to your wallet configuration that you understand and that are inline with your overall security policy. Tokemak is not responsible for any impact based on changes from these instructions.
{% endhint %}

## Listing Assets

To ensure you can see the balance of the Autopool tokens after depositing you can you list them in your workspace. This can be done from the "Assets" section in your console:\
![](/files/DO0EcUAI5Che6sEEIQbX)

In the search box you can search for "Tokemak" to see any existing assets. If the Autopool token does not appear in the results, click the "List asset" link at the bottom of the search results:\
![](/files/Qj7IQOnOdDqFgwbI9Fim)

Select the appropriate blockchain in the modal that appears, Ethereum, Base, Sonic, etc., and continue. You will then be prompted to enter the contract address for the Autopool you wish to list. All of our Autopool contract addresses can be found on this page: [Contract Addresses](/developer-docs/contracts-overview/contract-addresses). Common addresses are:

* Ethereum Mainnet
  * autoETH: [`0x0A2b94F6871c1D7A32Fe58E1ab5e6deA2f114E56`](https://etherscan.io/address/0x0A2b94F6871c1D7A32Fe58E1ab5e6deA2f114E56)
  * autoLRT: [`0xE800e3760FC20aA98c5df6A9816147f190455AF3`](https://etherscan.io/address/0xe800e3760fc20aa98c5df6a9816147f190455af3)
  * balETH: [`0x6dC3ce9C57b20131347FDc9089D740DAf6eB34c5`](https://etherscan.io/address/0x6dc3ce9c57b20131347fdc9089d740daf6eb34c5)
  * baseETH: [`0xAADf01DD90aE0A6Bb9Eb908294658037096E0404`](https://basescan.org/token/0xaadf01dd90ae0a6bb9eb908294658037096e0404)
  * dineroETH: [`0x35911af1B570E26f668905595dEd133D01CD3E5a`](https://etherscan.io/token/0x35911af1b570e26f668905595ded133d01cd3e5a)
  * autoUSD: [`0xa7569A44f348d3D70d8ad5889e50F78E33d80D35`](https://etherscan.io/address/0xa7569a44f348d3d70d8ad5889e50f78e33d80d35)
* Base Mainnet
  * baseETH: [`0xAADf01DD90aE0A6Bb9Eb908294658037096E0404`](https://basescan.org/address/0xAADf01DD90aE0A6Bb9Eb908294658037096E0404)

Confirm the details on the final page of the modal and click "List asset":\
![](/files/AlEjo0tzp0y8YjW41K6T)

Note: The asset may not show immediately in the search results after listing but should after a short period of time.&#x20;

Repeat the process for any additional tokens you wish to list.

## Enabling Contract Interactions

In addition to the Autopool you are wanting to interact with, the Autopilot UI relies on a router contract to streamline transactions. Depending on your wallet settings, both of these contracts may need configuration within your wallet.&#x20;

Through a combination of whitelisting and your transaction policy, you'll need to enable transfers, approvals, contract calls, and optionally signing messages to the Autopool. The exact settings that are required depend on your existing setup.

The latest addresses can always be found on our [Contract Addresses](/developer-docs/contracts-overview/contract-addresses) page but at the time of writing the routers are:

* Ethereum Mainnet - [`0x37dD409f5e98aB4f151F4259Ea0CC13e97e8aE21`](https://etherscan.io/address/0x37dD409f5e98aB4f151F4259Ea0CC13e97e8aE21)
* Base Mainnet - [`0xa18B89225491230fDb1883cFbda65E7931606931`](https://basescan.org/address/0xa18B89225491230fDb1883cFbda65E7931606931)

### Default Transaction Policy

The default transaction policy for Fireblocks allows contract calls and approvals to any contract but transfers only to whitelisted addresses. Follow the instructions in the following [#whitelisting](#whitelisting "mention")section for details on adding the router and Autopool.

### Custom Transaction Policy

If you utilize a custom transaction policy then you'll need to ensure you have the proper rules in place to cover the calls the Autopilot UI will make. Given that these settings are highly dependent on your wallets configuration we won't go over the exact entries but in some form the policy should allow:

* To the Autopilot Router
  * Transfers
  * Contract Calls (both approval and deployment)
  * Approvals
* To the Autopool (autoETH, autoUSD, etc)

  * Transfers
  * Contract Calls (both approve and deployment)
  * Approvals

For reference, these "allow" rules are sufficient to cover deposit/withdraw/stake/unstake in our UI:

<figure><img src="/files/bmWzMfI8ks2kLO3EravV" alt=""><figcaption><p>Note: "2 venues" here are the Autopilot Router and the Autopool (autoUSD, autoETH, etc)</p></figcaption></figure>

### Approvals

When withdrawing assets or staking them, the Autopilot UI defaults to gas-less approvals. If you wish to use them, you will need to setup a rule in your transaction policy to allowed Typed Messages. We would recommend disabling gas-less approvals in the UI and using standard approvals. To disable, in the Autopilot UI find the gear icon at the top right of the Withdraw/Stake tab. and toggle the "Disable gas-less approval" option:\
![](/files/DARUEe3nnNas7sukvlQV)

### Whitelisting&#x20;

If you do not allow transactions with non-whitelisted destinations then you must add both contracts to the "Whitelisted addresses" section in your wallet. To check this setting you can go to the gear icon in the top right of your console -> General Tab -> One-time address transactions. If this setting is not enabled (the button will say "Allow" if this is the case), then proceed with adding the addresses.

To add the addresses, in your console go to the "Whitelisted addresses" page from the left-hand menu. In the top-right of the page section, click the "Create wallet" button. This should give you the "Create whitelisted wallet" model:\
![](/files/JGzQwzbOeyl9S3Jjd4SS)

Since these are both contracts you'll be interacting with, select the "Contract" type. Let's handle the router first. Give it a name that you'll recognize such as "Tokemak Autopilot Router" and click Create Wallet. This should create and take you to the next step where you can add the actual router address:\
![](/files/yiBvNNJR6Dl2UjBWBrwD)

Click "Add address" on this page and select the appropriate blockchain from the list. You should now be prompted to add the address:\
![](/files/OElfIRMpdfk2oFmAViGb)

Once you have entered the address and clicked <img src="/files/JUVkraNAsPIn9zlliUW3" alt="Add address" data-size="line"> you are finished with this contract. Repeat the steps with the Autopool address which you can find above.&#x20;


# Troubleshooting

### I cannot connect to the platform <a href="#i-cannot-connect-to-the-platform" id="i-cannot-connect-to-the-platform"></a>

* **Network Selection:**
  * Ensure you select the correct network (Ethereum Mainnet). You can usually switch networks in the settings option of your wallet provider.
* **Using Ledger (Natively or with MetaMask):**
  * Unlock your Ledger device and select the Ethereum app.
  * Make sure the 'Contract Data' setting is enabled in the Ethereum app settings.
* **Using Coinbase:**
  * Use the scan QR option to connect.
  * To access directly from the Coinbase wallet, open the browser within the app and go to app.aave.com.
* **Using WalletConnect:**
  * Use the scan QR code option to connect.
* **Using Rabby:**
  * Use the scan QR code option to connect.

## Enable contract data on Ledger <a href="#enable-contract-data-on-ledger" id="enable-contract-data-on-ledger"></a>

Make sure to select the Ethereum app and enable contract data. To enable contract data:

* Connect and unlock your Ledger device.
* Open the Ethereum application.
* Press the right button to navigate to Settings.
* Then press both buttons to validate.
* In the Contract data settings, press both buttons to allow contract data in transactions.
* The device displays Allowed.

## I cannot send transactions <a href="#i-cannot-send-transactions" id="i-cannot-send-transactions"></a>

Make sure you have enough ETH in your wallet to interact with the platform. You must have ETH in your wallet for the transaction costs-- without it you won't be able to interact. Depending on the network status, the cost of the transactions may vary. At least 0.05 ETH may be required to interact properly.

## I do not find my position <a href="#i-do-not-find-my-position" id="i-do-not-find-my-position"></a>

If you used the Tokemak protocol in the past you will not find your positions on the current V2, you will need to visit he Tokemak V1 protocol. You can find an interface to interact with V1 version of the Tokemak protocol [here](https://v1.tokemak.xyz/).

## The site does not load <a href="#the-site-does-not-load" id="the-site-does-not-load"></a>

The following steps may solve your problems:

* If you are using Brave browser, switch to another browser to see if the issues are coming from the browser. If it is related to Brave browser some helpful actions are:
  * Clearing cache data and cookies for the site
  * Hard refresh with control + F5 (or cmd + r)
  * Disable brave wallet (or the wallet not being used as default, for example metamask, dapper, etc.)or other extensions that might be interfering with proper connection with the wallet
  * If the site still won't load after taking the steps above, you will have to use the platform in another browser.
* Make sure your internet connection is working and stable
* Restart the browser and try to connect again
* Try to hard refresh the site with control + F5
* Check if there are any updates for your browser or wallet provider. If so, update it to the latest version.

## My transaction is stuck pending confirmation <a href="#my-transaction-is-stuck-pending-confirmation" id="my-transaction-is-stuck-pending-confirmation"></a>

In this situation make sure to not keep sending transactions, as every new transaction will be stuck pending the oldest transaction to be confirmed. You can get rid of the stuck transaction by speeding it up or cancelling it. Depending on the wallet you are using, you may have that option natively. For example, metamask or trust wallet have both the options to cancel or speed up transactions.


# Contracts Overview

Below you can find a collection of technical information/docs and their respective contracts


# Autopool ETH Contracts Overview

At its simplest, this contract system is a set of a sub-systems that all revolve around, and reference each other through, a system registry. There are only a handful of user interactions that are mostly surfaced through a multicall router. Additionally, we have a few permissioned keeper-like processes that handle other parts of the system. Here we’ll run through general functionality and then dive deeper into each contract/system


# Autopool System High Level Overview

The purpose of the Autopool System is to continuously rebalance assets into the Destinations with the best return/risk profile. Earnings are auto-compounded for the users, reinvested into the Autopool, and then rebalanced out to begin earning. We’ll give an overview of how things work by looking at how the assets flow through the system.

### **Step 1: Users deposit assets**

Users must deposit assets into an Autopool for there to be assets to deploy. If this is a contract-to-contract interaction, this can happen directly in an Autopool. If this is a user interaction, through our UI, this will happen through our Router. The end-result is that the Autopool has idle assets sitting in it and the external party has Autopool shares in their wallet.

### **Step 2: Rebalance**

Once a sufficient number of assets are deposited, the Autopool, or more importantly the Strategy backing the Autopool, will begin to accept rebalance proposals from our Solver. When a proposal satisfies the constraints of the Strategy:

* The Autopools underlying asset, WETH in this case, will be sent to the Solver specified in the proposal
* The Solver will take those underlying assets and turn them into the LP tokens for the Destination specified in the proposal. This can involve swaps, liquidity provisioning, or w/e other means the Solver has to procure the LP tokens.
* The Solver will send those LP tokens back to the Autopool
* Once validating everything looks good with the Strategy, the Autopool deposit those LP tokens into the corresponding DestinationVault for that Destination.
* The DestinationVault will do what it needs to with the LP tokens depending on the type of Destination it is. If its just a pool Destination then the LP tokens can stay there. If its a Curve+Convex Destination, then the DestinationVault will stake the tokens into Convex.
* The DestinationVault mints the Autopool 1:1 shares of itself to represent the deposit
* Each DestinationVault has its own Rewarder where its shares are virtually staked on the Autopools behalf.

At the end of the rebalance, the Autopool has less of its base asset, and some number of DestinationVault shares representing a claim on some LP tokens.

### Step 3: Auto-Compounding

On a periodic basis, rewards from the Destinations will claimed and collected via a permissioned keeper process. This is most-likely, though not restricted to, incentive tokens through say Convex or Aura, for example.

These tokens all go to a central LiquidationRow contract where they can be liquidated to the base asset in bulk at a later time.

When that liquidation occurs, assets are sent back proportionately to the DestinationVaults that contributed to their balance. These assets are held in the DestinationVaults Rewarder where the Autopools earn them over a short period of time.

### Step 4: Debt Reporting

At least every 24 hours, each Autopool goes through a debt reporting where we re-value the LP tokens held by that Autopool. During that process, any available auto-compounded rewards are claimed and come into the Autopool as idle funds.

### Step 5: Rinse and Repeat

With sufficient idle assets in the Autopool, another rebalance can occur. There is no requirement that funds earned from a Destination must go back to that Destination.

The above outline focused on idle → LP rebalances but the rebalance step can occur for LP → LP rebalances as well. So long as the proposal results in a higher potential return (and satisfies other constraints) it can be executed.


# Autopool Contracts and Systems

The contracts were designed with a couple concepts in mind:

* It is possible that Tokemak could run multiple, separate, instances of this system on the same chain and the majority of contracts would not be safe to share between the two.
* Misconfigurations are a potential source of bugs and this is a highly configurable system. Any validations that can be performed during registration and setup, should.

To assist in enforcing these points, the system revolves around a SystemRegistry contract (`src/SystemRegistry.sol`), and most contracts inherit from a SystemComponent (`src/SystemComponent.sol`) contract that requires a reference to a SystemRegistry. These allow us to tie the various contracts together and provide a lookup point for the various contracts to talk to one another.

<figure><img src="/files/xEP1VeqCnJvdFrrtKsbh" alt=""><figcaption></figcaption></figure>


# Autopool Contract Security

With the exception of the SystemRegistry contract which uses an “onlyOwner” setup for security (which will be granted to a multisig and eventually a Governor contract), all other contracts follow a RBAC security system.

### `AccessController`

`src/security/AccessController.sol`

This is largely an OZ AccessControlEnumerable contract with the setup functions exposed, however, instead of each contract managing their own permissions, they all reference this one through the `SecurityBase` contract.

Given the sensitive nature of this contract, it is one of the contracts that can never be changed or upgraded in the system.

### `SystemSecurity`

`src/security/SystemSecurity.sol`

This contract allows us to coordinate operations across all Autopools in the system. This coordination falls into two areas:

1. Pausing
2. NAV operation coordination

#### Pausing

Via the usage of this contract, we are able to pause all Autopool operations in the system. Autopools can still be paused locally or one-by-one, but this gives us a way pause all of them in one go.

#### NAV Operation Coordination

Operations in an Autopool can be broken down into ones that can see nav/share go down, and ones that can’t. To ensure proper calculations, operations that *SHOULD NOT see* a nav/share decrease can never be executed within the context of those that can.

Operations that can see a decrease in nav/share:

* Debt reporting - `updateDebtReporting()`
* Rebalances - `flashRebalance()`

Operations that shouldn’t:

* User balance management - `deposit() / mint() / redeem() / withdraw()`

This restrictions applies cross-Autopool as well. An `updateDebtReporting()` call in one Autopool for example, blocks `deposit()` in all Autopools during its execution.

### `Pausable`

`src/security/Pausable.sol`

A near duplicate of the OZ contract by the same name. However, this one incorporates our SystemSecurity contract to support our global-pause behavior. It is used only by our Autopools.


# Stats

The Stats System is responsible for making all required signals (e.g., staking yield, fee yield, incentive yield, etc) available on-chain. These signals are read by the Strategy to determine if a rebalance is in the best interest of its Autopool. A `Calculator` is responsible for storing, augmenting, and cleaning data required to provide one of those signals. Let’s take an example Destination and see how it’s stats are built:

**Curve osETH/rETH + Convex Staking**

Stat calculators depend on each other to build the full picture of a Destination, with only the top-most calculator being referenced directly by the DestinationVault. In this case, the top-most calculator is the `ConvexCalculator`. This calculator is an example of an Incentive calculator. LP tokens staked into Convex automatically earn CRV and CVX. This pool is also configured with SWISE and RPL tokens as extra rewards. And so, some annualized amount of CRV, CVX, SWISE, and RPL will be reported to the Strategy where it will calculate what the yield of those tokens are.

As a dependency, the `ConvexCalculator` takes a reference to a calculator responsible for providing stats about the DEX pool itself, a `CurveV1PoolNoRebasingStatsCalculator` (V1 calculators work for both Stableswap and Cryptoswap pools). This calculator provides the trading fee yield for the pool.

The last piece(s) are the stats about the LST tokens themselves, osETH and rETH. These calculators, `OsethLSTCalculator` and `RethLSTCalculator`, were provided to the `CurveV1PoolNoRebasingStatsCalculator` as dependencies when it was created. These calculators provide stats such as the base yield and price-to-book value.

With all of these calculators each providing their own data to the overall picture, a Strategy can get an accurate reading of a Destinations return.

### Types of Calculators

* Incentive - Responsible for tracking the return of the incentives available when staking in Convex/Aura/Maverick/etc.
* DEX - Responsible for tracking the trading fee yield of a given DEX pool
* LST - Responsible for tracking the base yield and backing of an LST

### Keeping Data Up-to-Date

A keeper network is used to periodically snapshot new data. Each calculator type defines the frequency and conditions under which a snapshot should be taken. Importantly, each calculator only stores the required information to provide its stats. If it needs to provide stats from another calculator, those are read at the time of the request to ensure that data is consistent.

### Architecture

<figure><img src="/files/068hHjMC6wHgAxlrnlvS" alt=""><figcaption></figcaption></figure>


# Autopool Strategy

The purpose of Autopool System is to continuously rebalance  assets into the destinations with the best return/risk profile. However, the best risk/return profile is somewhat subjective, as such, each Autopool has an assigned `Strategy` that is responsible for determining if a given rebalance (e.g., swap Pool A LP units for Pool B LP units) meets its requirements. For the LST vaults, there are a number of criteria that are considered in deciding if a rebalance is favorable, including:

* Total Slippage - the absolute difference in the value of the in and out LP tokens. Priced using safe price oracles (previously audited).
* Increase in expected return metric between the assets being swapped. Expected return is composed of (1) LST base yield, (2) DEX fee return, (3) incentive APR. Expected return metric is calculated as follows:

```matlab
Composite Return Metric = W_Base * Base Return + W_Fee * Fee Return 
										+ W_Incentive * Incentive Return + W_Price * Price Return
										

Where,
			0 <= W_Base, W_Fee, W_Incentive, W_Price <= 1.0

Default Values
			W_Base = 1.0
			W_Fee = 1.0
			W_Incentive = 1.0                            
			W_Price (Discount: Price Return > 0) (Entering destination) = 0.75
			W_Price (Discount: Price Return > 0) (Exiting destination) = 0.0  
			W_Price (Premium: Price Return < 0) = 1.0
		
```

* Swap Loss Offset Period - how long it takes for the incremental expected return to offset the immediate loss (swap cost). The Autopool will utilize an adaptive offset period that determines how strict or loose the offset period is. The LMP rebalance transactions (a.k.a pool/destination swaps) will occur only if the following condition is met:

$$
ETH\_gain\_{predicted}\*{swap\_cost\_offset\_period\above{1pt} 365} > swap\_cost \\
$$

where,

$$
ETH\_gain\_{predicted} = APR\_{new} \* ETHvalue\_{new} - APR\_{old} \* ETHvalue\_{old} \\
swap\_cost\_offset\_period\_{min} = 7 \\
swap\_cost\_offset\_period\_{max} = 60 \\
swap\_cost = max(ETHvalue\_{old} - ETHvalue\_{new}, 0)
$$

***

$$
ETH\_gain\_{predicted}
$$

* &#x20;is the annualized gain in ETH expected to be earned as a result of this rebalance transaction.

$$
APR\_new
$$

&#x20;                                                                                            and[^1]

$$
APR\_old
$$

* are the new and old composite APRs for the destination involved in the swap/rebalance transaction.

$$
swap\_cost\_offset\_period
$$

* is defined as period in days allowed for this rebalance transaction to recoup or recover the slippage loss. Default value is 28. At the minimum value of 7 days, approximately 525 bps of incremental APR will be needed to offset a swap cost of 10 bps. Similarly, a value of 60 days allows \~ 60 bps of incremental APR at 10 bps of swap cost.

$$
swap\_cost
$$

* is the loss in value in ETH units as a result of this transaction primarily driven by slippage, token swap fees, gas used to execute the rebalance operations.

### Additional Rebalance Gatekeeping Features

#### a. **Adaptive Swap Loss Offset Period**

Swap loss offset period determines how loose or strict the constraint to allowing a pool swap is. A large value relaxes the constraint and will allow many swap transactions to go through. In comparison, a value such as 7 days will require a large hurdle to be met before a destination pool swap transaction is allowed.

If the value of swap loss offset period is fixed at a high value, the Autopool system could exhibit increased turnover and experience increased swapping cost. The following describes the mechanism to adapt the swap loss offset period and tighten or loosen the pool swapping constraint should conditions warrant.

At every pool swap-out transaction, we determine the time elapsed since the last time we added to this pool. A pool swap-out transaction is a non trivial swap out i.e. swaps from WETH reserves (base asset of the Autopool) are not included. Let this time be $t$. Next, we define a constraint violation event as a pool swap out transaction where $t$ ≤ swap\_cost\_offset\_period.

After 5 or greater constraint violation swaps within 10 swaps, the swap loss offset period is decreased by x (tighten step size) days until it reaches the minimum allowed value of 7.

After no swaps transactions occur for the period of y (constraint relax period) days, the swap loss offset period is increased by z (relax step size) day until it reaches the maximum allowed value of 60 days.

#### b. **30-60-90 NAV Test (LookBack Test)**

This is a test conducted on the NAV (per unit or token) of the Autopool. Swapping costs should be carefully monitored to provide positive value to the Autopool. The 30 followed by 60, 90 day test is meant to allow enough time for the Autopool to earn back the swap costs. Should a lot of swaps have recently occurred (i.e. frequent swaps is not a feature of the system but just happen to occur in clusters some times), looking back in the past far enough should result a positive NAV delta i.e. NAV per token should have increased over time. A variant of this test is a 30-60 NAV test.

The following steps are conducted in this test.

1. Aligned with some time reference (i.e. 30th of every month), record the NAV of the Autopool.
   1. Calculate the delta with the NAV recorded 30 days in the past.
   2. Calculate the delta with the NAV recorded 60 days in the past
   3. Repeat with NAV recorded 90 days in the past.
2. If all of the three delta values are negative, pause pool swaps until
   1. the NAV reaches the highest NAV recorded (of the 3 values - 30, 60, 90 days in the past)
   2. 90 days have lapsed since the test was conducted
3. After the pause, set the value of $swap\\\_cost\\\_offset\\\_period$ at the minimum value $swap\\\_cost\\\_offset\\*period*{min}$

References:

1. [verifyRebalance Interface](https://github.com/Tokemak/v2-core-hats/blob/74b397ce988a418a1bd02a45716cfc964922be26/src/interfaces/strategy/IStrategy.sol#L71)
2. verifyRebalance is called [here](https://github.com/Tokemak/v2-core-audit-2023-07-14/blob/62445b8ee3365611534c96aef189642b721693bf/src/vault/libs/LMPDebt.sol#L89) by Autopool on rebalance to ensure it is a favorable rebalance.

### Call Flow to the Strategy

#### Rebalance

<figure><img src="/files/VvxqBQALlQmLBZuFdr9B" alt=""><figcaption><p>Click to Expand Image</p></figcaption></figure>

#### During Debt Reporting

At least every 24 hours, each Destination configured on the Autopool has its cached price information updated. This has the potential to lower the nav/share of the Autopool right at that moment. When the Autopool sees a profit during debt reporting, that profit is locked up for a period time, say 24 hours. This means any nav/share increase unlocks over that same time period. At the end of a call to debt reporting, `AutopoolStrategy.navUpdate()` is called.

[^1]:


# Pricing

The valuation of tokens is core to the operation of this system. All token valuations are performed through the `RootPriceOracle` and different approaches for pricing are used depending on the type of token (native or LP) and the intended usage of the price:

### Types of Prices

#### “Safe” Prices

These are prices that are calculated/queried from off-chain sources. This includes sources such as Chainlink, Redstone, and Tellor. These are exposed through three calls on the `RootPriceOracle`: `getPriceInEth()`, `getPriceInQuote()`, and one of the return values of `getRangePriceLP()`

These are mainly used for operations where we aren’t executing with the price at that moment. This can include pricing debt in the Autopools, calculating statistics, etc.

#### Spot Prices

These are prices that are calculated/queried from primarily on-chain sources. These are always in reference to a specific pool that want to know the spot price of the tokens from. To calculate these values, a small amount of token is trial swapped through a pool to determine its execution price and then any fees are factored back in.

For requests that don’t have the requested quote token as one of the tokens in the pools, “safe” prices are used to complete the steps in the conversion.

These prices are exposed through `getSpotPriceInEth()` and one of the return values of `getRangePriceLP()` .

Spot prices are checked against some tolerance when used within the system to ensure they are safe to use. The spot price of the token must be within some bps of the safe price. These are used during rebalance execution to measure impact on pools we are operating against as well as one of the ends of the `getRangePriceLP()` call.

#### Floor & Ceiling LP Prices

These prices are exclusively used in the Autopools when debt reporting has gone stale. While this should never actually be an occurrence, should a pool enter this state, debt that is stale will be re-valued using this method of pricing. This will take the worst price (depending on the operation that could be the highest or the lowest) between the safe and spot prices of all the tokens that constitute the LP token, and value all the reserves that back that LP back at that single price. This is to ensure that any potential manipulation that could be occurring cannot negatively impact the Autopool.

### Architecture

The system-at-large will only ever interact with the RootPriceOracle. All specific implementations related to the method of pricing an asset are hidden behind here:

<figure><img src="/files/Xs0tNCubL7FnxtOKc3gb" alt=""><figcaption></figcaption></figure>

The majority of functions on the RootPriceOracle are not view functions even though they are performing “view” type operations. This is due to methods used for pricing. Since we use swaps to calculate prices, and we can’t count on every DEX to have a view operation to perform this, we have to keep the interface as payable.

### Safe Price Call Flow

The following is an example call flow for resolving a complex price. We will assume that the requested price is for the $ABC token in ETH. $ABC token has an $ABC/USD feed through Redstone:

<figure><img src="/files/cQAH68ABZFbdMOfVvO7f" alt=""><figcaption></figcaption></figure>

### LP Price Call Flow

The following is an example call flow for resolving the safe and spot price of an LP token. We will assume this is a Curve pool:

<figure><img src="/files/vveqgx4GRn02ohO0qIGr" alt=""><figcaption></figcaption></figure>


# Swap Router

When there is a withdraw from an Autopool, a couple things can happen. If there are enough assets to cover the withdrawal sitting idle in the Autopool, then all of the assets come from there. However, if there is not, then we must pull from the market. Just retrieving the LP positions doesn’t help the user, we must provide them back their funds in the base asset of the Autopool. This is where the SwapRouter comes in.

The SwapRouter contains routes for all the tokens that make up the constituents of any LP token we support, back to the base asset of the Autopool. This is a list that will be kept up to date by the team to ensure users receive the best execution when exiting the pools.

### Example Routes

The routes can be simple or complex. We can use the same pools we are in as Destinations or completely different pools should there be better execution.

Simple Example for TokenA → TokenD:

* Swap TokenA → TokenD in Balancer TokenA/TokenD Pool

Complex Example for TokenA → TokenD

* Swap TokenA → TokenB in Curve TokenA/TokenB Pool
* Swap TokenB → TokenC in Uni V3 TokenB/TokenC Pool
* Swap TokenC → TokenD in Balancer TokenC/TokenD Pool

### Swap Adapters

The chaining of operations all happen at the SwapRouter level. The only thing an adapter needs to be able to do is to swap between two tokens and validate that a given configuration is supported in the specified pool. They are only callable by the Currently we support:

* Balancer Pools
* Curve StableSwap Pools
* Curve CryptoSwap Pools
* UniV3 Pools


# Curve Resolver

Getting information generically about a given Curve pool can be a tricky task given the slight variations between their different types of pools. This is a task we need to perform in many different areas of the app and so this contract was built to assist in that.

Luckily, Curve provides a meta registry themselves that can perform this lookup. However, at the time of writing this, there is a type of pool that is not supported by their registry and that is their Stable-NG type pools. To get around this, the CurveResolver has a fallback method where it attempts to figure out the information based on the successful execution of various functions.

This approach currently works for the types of pools we are interested in supporting. Should new types of pools be introduced in the future, the approaches outlined may need to be re-evaluated.


# Message Proxy

This contract is an interface to be able push data or events to other chains. It is exposed to the rest of the system as a generic interface but currently relies entirely on Chainlinks CCIP. It is designed to support a couple core features:

* Fan-out messaging. Given a sender and message type, send the provided data to one or many destination chains
* Retries. The last message of a given sender+type can be re-sent to a destination. This serves a few purposes
  * Should CCIP ever be down and messages unable to be sent, we should be able to get the data off that we need when it comes back online
  * Our contract could be out of funds when the send is attempted. We need processes that send the message to continue without reverting, but we want to be able to send that message eventually
  * Seeding information when standing up the destination chain. Some messages have large delays between them being sent. This can make standing up dependent contracts on the destination difficult and time consuming. Being able to re-send the last message ensures we have the information we need as soon as we can.

### Usage

Current usage is restricted to just the LST calculators through the LSTCalculatorBase. The stats related to LSTs are specific to their native chain.


# sTOKE

sTOKE (formerly accTOKE) gives users the ability to stake their TOKE and earn rewards in WETH. This contract is largely based on <https://docs.oeth.com/governance/ogv-staking>.

Differences to call out

* Rewards can accrue in the contract for a user and don’t actual claiming
* Rewards are queued instead of being on an emissions schedule. Rewards will not be added in large amounts to ensure there can’t being meaningful gaming of, and spikes in, `accRewardPerShaer`

### Interactions

Generally sTOKE sits on the outside of the platform. It doesn’t have a integration into the Autopool router. The exception to this is within the AutopoolMainRewarder. We optionally have the ability to configure that if TOKE is the token being rewarded, it can be staked for a period of time into sTOKE upon claim.


# Autopool Router

The Autopool Router is the main entry for users in the system. This is a multicall-type contract where the exposed functions are designed to be chained together to perform various operations. This can include but is not limited to:

* Depositing into an Autopool and staking the tokens into a rewarder:
  * deposit(autoPool, router, amount, min)
  * approve(autoPool, rewarder, max)
  * stakeVaultToken(autoPool, max)
* Migrating from one Autopool to another
  * withdrawVaultToken(autoPool, rewarder, amount, true)
  * selfPermit(autoPool, amount,….)
  * redeem(autoPool, router, amount, min)
  * approve(weth, autoPool2, max)
  * depositBalance(autoPool2, router, min)
  * stakeVaultToken(autoPool2, max)

The router also has the ability to swap tokens utilizing one of the AsyncSwappers configured in our system. Whether or not a swap can be utilized depends on the type of operation being performed. If we are able to know the exact number of input tokens upfront then it can be performed. Otherwise, we cannot.

### Router should hold no balance

Given the flexibility of the Router it is possible to leave funds in the contract should the order of operations be incorrect. Those funds can then be withdrawn by anyone. This is expected. The Router will be integrated into our front-end and only specific flows will be supported ensuring that all token balances are sent back to the user when appropriate.


# Liquidation

Liquidation in Autopilot refers to the process of auto-compounding rewards from our various asset deployments. For efficiency reasons, LiquidationRow attempts to batch as much of the claiming and swapping process as possible. This is broken up into two processes:

### Claiming

Each DestinationVault is required to implement a `collectRewards()` function which will claim and transfer any reward tokens back to the liquidator. The exact details of how a claim happen are not of a concern to the liquidator, it is only worried about being told how much of some token it has received. Call flow:

<figure><img src="/files/dYBs2snjLoIdyx8Oj8VH" alt=""><figcaption></figcaption></figure>

### Liquidation

Both the process of claiming and liquidation can be gas intensive given how many DestinationVaults and reward tokens we may need to process in the system. Both of these processes are designed to be able to work on a subset of either the DestinationVaults or the tokens to combat this. The goal is batch as match of the work as possible for efficiency, though. So, during liquidation the balance of tokens across many DestinationVaults are compiled, swapped as a single operation, and the proceeds distributed back to the DestinationVaults according to the share they contributed. Call flow:

<figure><img src="/files/5fQjwahZDLKoWUM8Y1Tn" alt=""><figcaption></figcaption></figure>

### Fees

This process is one that is permissioned and run by Tokemak. To support the gas and fees required to perform this a fee can optionally be enabled against any liquidated funds.


# Destination Vaults

Destination Vaults act as our proxy to the greater DeFi ecosystem. Their goal is to provide a common interface for us to deposit/withdraw LP tokens and earn yield. Each type of Destination has its own unique concrete DestinationVault implementation. Currently we support:

* Balancer Pools
* Balancer Pools with LP staked into Aura
* Curve Pools with LP staked into Convex
* Maverick Boosted Positions

### Core Functionality

#### Depositing and Withdrawing LP Tokens

Autopool’s will be the main actors interacting with a Destination Vault. Primarily this will come in the form of deposit and withdrawing LP tokens. The actions taken after a deposit aren’t much of a concern to the Autopool and can vary depending on the specific type of Destination. If this is a just a “Balancer Pool” type of Destination then the LP tokens will stay in the Destination Vault. If this is a Destination that say stakes into Aura, then that operation will happen upon deposit.

Withdrawing can come in two forms: as the LP units, or as the base asset. The LP unit can be withdrawn as part of a rebalance. During a user withdraw where we have to pull from the market, the LP units burned and the resulting tokens will be swapped into the base asset. All base assets in the system will be WETH at this time. Additional validations will be required to support additional base assets.

#### Collecting Rewards

Depending on the type of Destination Vault, rewards may be due to us for holding or staking the LP units. The implementation of this can be hard coded to return nothing, or to interact with an external protocol. Resulting claimed tokens are sent to the caller of `collectRewards()`.

#### Marketplace Rewards

These functions are intentionally left empty at this time.

### Architecture

<figure><img src="/files/oNcATuTWcbUWJdO7Qpmq" alt=""><figcaption></figcaption></figure>


# Autopools

Autopools will be the main jumping off point for end-user interactions with the system (though technically this is the Router, these are the tokens the user will get back). Users will deposit and withdraw the base asset from here. Vaults are ERC 4626 + Permit compatible.

An Autopool is actually a pair of contracts. These contracts are:

* The pool itself
* A Convex-like, block height+rate style, Rewarder

The purpose of an Autopool is to represent a set of destinations that deposited assets may be deployed. It acts almost as an index. If an Autopool points to 5 destinations then your assets may be deployed to one or all of those destinations depending on how much those destinations are currently earning.

### Base Asset

An Autopool should track it’s “base asset”. This is the asset that will be deposited and withdrawn from the pool. Any auto-compounding that happens will be in terms of the base asset, as well. However, it is expected that the Autopools associated Rewarder can emit any token(s).

### Tracked Tokens

Autopools support being able to recover tokens that are erroneously sent to it. However, we would not want the ability to be able to transfer out any tokens that are core to operation of the Autopool. This would include the base asset and any DestinationVault shares that it currently holds. Tokens that should not be transferred are called “tracked”.

### Debt Reporting

At least every 24 hours, or whenever valuations deviate by a certain threshold, the value of the DestinationVault tokens that are held by the Autopool are re-valued. Deposits and withdraws from the Autopool are based on these cached values. Should this debt reporting result in an increase in value, shares will be minted to the Autopool to offset the increase. This is to ensure there isn’t a sharp increase in the nav/share of Autopool. Auto-compounded rewards are also incorporated during this time.

#### Fees

Two types of fees can be taken by the Autopool and they are taken during Debt Reporting.

* Periodic Fee - This is a set fee annualized fee that is taken each Debt Reporting
* Streaming Fee - This fee is taken on profit earned by the Autopool. Optionally, this fee can only be taken when profit exceeds previous values (the high watermark).
  * Should the high watermark be enabled and not be broken for a period of 60 days, it will start to decay until we are able to take fees again

Any locked profit will be burned to offset the dilution incurred by any minted fee shares

### Valuation

An Autopool tracks three valuations for any LP units it holds via a Destination Vault. These are the safe, spot, and mid point price of the LP tokens (see <https://docs.tokemak.xyz/developer-docs/contracts-overview/autopool-eth-contracts-overview/autopilot-contracts-and-systems/pricing>). These values are used for different purposes in the life cycle of assets in the Autopool:

* Higher of safe and spot: Used during deposit to value the assets held by the Autopool
* Lower of safe and spot: Used during withdraw to value the assets held by the Autopool
* Mid point: Used for general reporting and fee calculations

To value shares for general purposes the standard ERC4626 `convertToAssets(uint256)` should be used.&#x20;

#### Max Withdraw Value

Using different valuations depending on the operation means that to find the maximum amount of assets one would receive during a `redeem()` call we need something more than the standard `convertToAssets(uint256)`. For this, we have an extension to the standard function:

```
uint256 sharesToRedeem = 10e18;

// Begin by getting the total assets of Autopool valued for your intended operation
uint256 totalAssets = autopool.totalAssets(2); // 0 - General, 1 - Deposit, 2 - Withdraw

// Get the total supply of Autopool
uint256 totalSupply = autopool.totalSupply();

// Use the calculated total assets to do the conversion
uint256 maxReturnedAssets = autopool.convertToAssets(sharesToRedeem, totalAssets, totalSupply, 0); // 0 - Round down
```

#### Max Deposit Value

Calculating the shares you'd receive on a deposit follows very closely to the previous example

```
uint256 assetsToDeposit = 10e18;

// Begin by getting the total assets of Autopool valued for your intended operation
uint256 totalAssets = autopool.totalAssets(1); // 0 - General, 1 - Deposit, 2 - Withdraw

// Get the total supply of Autopool
uint256 totalSupply = autopool.totalSupply();

// Use the calculated total assets to do the conversion
uint256 maxReturnedShares = autopool.convertToShares(assetsToDeposit, totalAssets, totalSupply, 0); // 0 - Round down
```

#### Estimating Withdraw Value&#x20;

Above we went through how the Autopool values the tokens it holds and how to calculate a max return value. However, there is another aspect to a `redeem()` call that can affect the assets returned to the user. An Autopool holds a certain percentage of assets in idle to cover small withdraws. However, if an attempted withdraw needs more assets than sit in idle, the Autopool will start the redemption process by going to the market first. This entails removing liquidity from one or more destinations, and swapping out of non-WETH assets. These swaps can result in slippage and fee's taken in the liquidity pool being swapped through. The Autopool will also ensure that any recent price positive movements in the LP tokens being liquidated are captured. All of this is considered slippage that is passed on to the user performing the `redeem()`.&#x20;

To retrieve an accurate estimation of assets that would be returned one can use the `previewRedeem()` call. However, it should be noted that this call deviates from the ERC4626 spec in that it is a nonpayable function instead of a view function. No state changes are made as a result of the call, but to provide the estimate state changes are necessary which are later reverted. This should not be called on-chain.

Due to this possible slippage, it is important to note that any call to `redeem()` should be checked that an expected amount of assets were received and to revert if not.

### Rebalancing

Assets can be rebalanced between destinations according the rules of the Autopools configured strategy. Autopools support the ERC3156 flash loan interface and can grant our Solver access to funds to be able convert them into a more desirable Destinations LP token.

### Architecture

GIven that the creation of Autopools may vary widely depending on the type of Autopool being created (future looking), Autopools and their corresponding Factory are a 1:1 relationship. This differs from other factory+register+template relationships in our system:

<figure><img src="/files/11vrlyGbd1QKD4pULoyy" alt=""><figcaption></figcaption></figure>


# Autopool Contracts Glossary

* **Autopool System** - Name of the overall system
* **Autopool** - A 4626 vault that users deposit assets into
* **AutoPoolETH** - A specific implementation of an AutoPool denominated in ETH/WETH
* **Destination** - An external contract, or set of contracts, that we LP/stake user funds into
  * Examples
    * A Balancer pool
    * A Balancer pool with LP staked into Aura
    * A Curve pool with LP staked into Convex
* **DestinationVault** - A contract that sits in front of a Destination in our system. These act has a proxy and give us a common interface to that Destination to perform our operations.
* **Solver** - Contract that can turn assets into LP tokens, LP tokens into other LP tokens, or LP tokens into assets
* **Strategy** - A contract that determines whether a Rebalance is in the best interest of an Autopool
* **Rebalance** - The deployment of:
  * Idle funds to a Destination
  * Funds from one Destination to another Destination
  * Funds from one Destination back to Idle
* **Liquidation -** The process of taking rewards and auto-compounding them into WETH


# Contract Addresses

{% tabs %}
{% tab title="Eth Mainnet" %}

### Core System Registry

* System Registry: [`0x2218F90A98b0C070676f249EF44834686dAa4285`](https://etherscan.io/address/0x2218F90A98b0C070676f249EF44834686dAa4285)
* Access Controller: [`0x37767cBfF88Cb623E9404e959560984F7D742dF6`](https://etherscan.io/address/0x37767cBfF88Cb623E9404e959560984F7D742dF6)
* System Security: [`0x027a3359b803885261B140415873845f72238833`](https://etherscan.io/address/0x027a3359b803885261B140415873845f72238833)
* Autopool Registry: [`0x7E5828a3A6Ae75426d739E798140513A2E2964E4`](https://etherscan.io/address/0x7E5828a3A6Ae75426d739E798140513A2E2964E4)
* Destination Template Registry: [`0xa698A94C0dCE389B862f58B08f618a981Ea99402`](https://etherscan.io/address/0xa698A94C0dCE389B862f58B08f618a981Ea99402)
* Destination Vault Registry: [`0x3AaC1CE01127593CA0c7f87b1Aedb1E153e152aE`](https://etherscan.io/address/0x3AaC1CE01127593CA0c7f87b1Aedb1E153e152aE)
* Destination Vault Factory: [`0x37De6f9D23d26DfbCB6dbEE86Dc7ca538c0ff124`](https://etherscan.io/address/0x37De6f9D23d26DfbCB6dbEE86Dc7ca538c0ff124)
* Swap Router: [`0x6201523176dC66CCd249248b9c422Aac725eA3f2`](https://etherscan.io/address/0x6201523176dC66CCd249248b9c422Aac725eA3f2)
* Async Swapper Registry: [`0x73526d80aC5Db9ccD2aa46436744c542eF9c0b75`](https://etherscan.io/address/0x73526d80aC5Db9ccD2aa46436744c542eF9c0b75)
* Root Price Oracle: [`0x61F8BE7FD721e80C0249829eaE6f0DAf21bc2CaC`](https://etherscan.io/address/0x61F8BE7FD721e80C0249829eaE6f0DAf21bc2CaC)
* Stats Calculator Registry: [`0xaE6b250841fA7520AF843c776aA58E23060E2124`](https://etherscan.io/address/0xaE6b250841fA7520AF843c776aA58E23060E2124)
* Stats Calculator Factory: [`0x8198069F1709aDDC6A162c9433665776E5Bc917c`](https://etherscan.io/address/0x8198069F1709aDDC6A162c9433665776E5Bc917c)
* Curve Resolver: [`0xC7c77B3a2C2641c6eE6c52bbD72EcfC86B53ba38`](https://etherscan.io/address/0xC7c77B3a2C2641c6eE6c52bbD72EcfC86B53ba38)
* Lens: [`0x146b5564dd061D648275e4Bd3569b8c285783882`](https://etherscan.io/address/0x146b5564dd061D648275e4Bd3569b8c285783882)
* Incentive Pricing Stats: [`0x8607bA6540AF378cbA64F4E3497FBb2d1385f862`](https://etherscan.io/address/0x8607bA6540AF378cbA64F4E3497FBb2d1385f862)
* Liquidation Row: [`0xBf58810BB1946429830C1f12205331608c470ff5`](https://etherscan.io/address/0xBf58810BB1946429830C1f12205331608c470ff5)
* Autopilot Router: [`0x39ff6d21204B919441d17bef61D19181870835A2`](https://etherscan.io/address/0x39ff6d21204B919441d17bef61D19181870835A2)
* MessageProxy: [`0x20ea2F2ECf36bCb6Df086D923A120496DC616f76`](https://etherscan.io/address/0x20ea2F2ECf36bCb6Df086D923A120496DC616f76)
* EthPerTokenSender: [`0xDd92511f1FbE5de911E22A0247Ba8c212D625A3d`](https://etherscan.io/address/0xDd92511f1FbE5de911E22A0247Ba8c212D625A3d)

### Autopools

* autoETH: [`0x0A2b94F6871c1D7A32Fe58E1ab5e6deA2f114E56`](https://etherscan.io/address/0x0A2b94F6871c1D7A32Fe58E1ab5e6deA2f114E56)
  * autoETH Rewarder: [`0x60882D6f70857606Cdd37729ccCe882015d1755E`](https://etherscan.io/address/0x60882d6f70857606cdd37729ccce882015d1755e)
* dineroETH: [`0x35911af1B570E26f668905595dEd133D01CD3E5a`](https://etherscan.io/address/0x35911af1B570E26f668905595dEd133D01CD3E5a)
  * dineroETH Rewarder: [`0x9ABE58Bc98Ae95296434AB8f57915c1068354404`](https://etherscan.io/address/0x9ABE58Bc98Ae95296434AB8f57915c1068354404)
* autoUSD: [`0xa7569A44f348d3D70d8ad5889e50F78E33d80D35`](https://etherscan.io/address/0xa7569A44f348d3D70d8ad5889e50F78E33d80D35)
  * autoUSD Rewarder: [`0x726104CfBd7ece2d1f5b3654a19109A9e2b6c27B`](https://etherscan.io/address/0x726104CfBd7ece2d1f5b3654a19109A9e2b6c27B)
* autoDOLA: [`0x79eB84B5E30Ef2481c8f00fD0Aa7aAd6Ac0AA54d`](https://etherscan.io/address/0x79eB84B5E30Ef2481c8f00fD0Aa7aAd6Ac0AA54d)
  * Extra Rewarder (DOLA): [`0x17c50B9Fba151f5f88618DAe6C394BD731022975`](https://etherscan.io/address/0x17c50B9Fba151f5f88618DAe6C394BD731022975)
* siloUSD: [`0x408b6A3E2Daf288864968454AAe786a2A042Df36`](https://etherscan.io/address/0x408b6A3E2Daf288864968454AAe786a2A042Df36)
  * Rewarder: [`0xE041B3b14E76e4B4605876875e1860c6005456f2`](https://etherscan.io/address/0xE041B3b14E76e4B4605876875e1860c6005456f2)
  * xSILO Rewarder: [`0x23e9Bbd1c4528F904526bE2761250E94177FeC38`](https://etherscan.io/address/0x23e9Bbd1c4528F904526bE2761250E94177FeC38)
* anchrgUSD: [`0x1abd0403591be494771115d74ed9e120530f356e`](https://etherscan.io/address/0x1abd0403591be494771115d74ed9e120530f356e)
  * anchrUSD Rewarder: [`0xf590865e624d14ed4659F1fCA736634B9926E716`](https://etherscan.io/address/0xf590865e624d14ed4659F1fCA736634B9926E716)

### Autopool Templates

* AutopoolETH Template: [`0xF90bB2BAa90B457A35c37c5A96De2720CE367281`](https://etherscan.io/address/0xF90bB2BAa90B457A35c37c5A96De2720CE367281)
* AutopoolETH Factory: [`0x7fEd74094B7010c6FB3010ed5EfC00772fD2ED1f`](https://etherscan.io/address/0x7fEd74094B7010c6FB3010ed5EfC00772fD2ED1f)

### Autopool Strategy Templates

* Standard: [`0xea7daf04144bbFfb8AB4F79F5115130D8AAe2Bd9`](https://etherscan.io/address/0xea7daf04144bbFfb8AB4F79F5115130D8AAe2Bd9)
* With Points Hook: [`0x63139fe3848aC53E5b668e19Df1DD4e6f31428C8`](https://etherscan.io/address/0x63139fe3848aC53E5b668e19Df1DD4e6f31428C8)

### Swap Router Swappers

* Balancer Swapper: [`0x780D5Bc2B1FFEfa1f5BBe1ab0C056C81774bA5F1`](https://etherscan.io/address/0x780D5Bc2B1FFEfa1f5BBe1ab0C056C81774bA5F1)
* Curve V1 Swapper: [`0x620fFcA1EF197f1CD9374BD31992b65A18E89Bc0`](https://etherscan.io/address/0x620fFcA1EF197f1CD9374BD31992b65A18E89Bc0)
* Curve V2 Swapper: [`0xd3bF4ac5d54f262F977be28c761470ea0E612081`](https://etherscan.io/address/0xd3bF4ac5d54f262F977be28c761470ea0E612081)
* Uni V3 Swapper: [`0x106A60958c8637C9DC850757D1Ed2AC11c73963d`](https://etherscan.io/address/0x106A60958c8637C9DC850757D1Ed2AC11c73963d)

### Oracles

* wstETH Oracle: [`0x31fec5a6C6bBF907144e6F81f60292BA7a5af883`](https://etherscan.io/address/0x31fec5a6C6bBF907144e6F81f60292BA7a5af883)
* eETH Oracle: [`0xAA573a9bf7560870a925Ea1704C061546486dF81`](https://etherscan.io/address/0xAA573a9bf7560870a925Ea1704C061546486dF81)
* ETH Pegged Oracle: [`0xDEb361BAbf4C8277f0B2ee30914fb155b1A67DE3`](https://etherscan.io/address/0xDEb361BAbf4C8277f0B2ee30914fb155b1A67DE3)
* Chainlink Oracle: [`0x701F115a4d58a44d9e4e437d136DD9fA7b1B6C3f`](https://etherscan.io/address/0x701F115a4d58a44d9e4e437d136DD9fA7b1B6C3f)
* Curve V1 Oracle: [`0xaeD535d737e80597452d1f04D1b64b4f2Ab8A92b`](https://etherscan.io/address/0xaeD535d737e80597452d1f04D1b64b4f2Ab8A92b)
* Curve V2 Oracle: [`0xD460a37880C35AACF4f01ea6748F1195899aD160`](https://etherscan.io/address/0xD460a37880C35AACF4f01ea6748F1195899aD160)
* Balancer Meta Oracle: [`0x4D37d799a44515c25e43cA6ec9E4fF7a0a2a34d9`](https://etherscan.io/address/0x4D37d799a44515c25e43cA6ec9E4fF7a0a2a34d9)
* Balancer Gyro Oracle: [`0x4c70ef1DefFC14e8C0a3D5135EC8EbAfEFcC1c58`](https://etherscan.io/address/0x4c70ef1DefFC14e8C0a3D5135EC8EbAfEFcC1c58)
* Balancer Composable Oracle: [`0x7C19e64904ABA791dD653ECF7F355d65d7665a8b`](https://etherscan.io/address/0x7C19e64904ABA791dD653ECF7F355d65d7665a8b)
* Redstone Oracle: [`0xe1aDb6967e1dBD5332d499dFA2f42377d1DA5913`](https://etherscan.io/address/0xe1aDb6967e1dBD5332d499dFA2f42377d1DA5913)
* Custom Set Oracle: [`0x53ff9D648a8A1cf70c6B60ae26B93047cc24066f`](https://etherscan.io/address/0x53ff9D648a8A1cf70c6B60ae26B93047cc24066f)
* PxETH Oracle: [`0x3cC52170fDEA5C485db6d412b78ea40F27FFC629`](https://etherscan.io/address/0x3cC52170fDEA5C485db6d412b78ea40F27FFC629)
* Zero Oracle: [`0x655fA98eA9BBcC6A2eB3F3c01F26929Fb3b8aa28`](https://etherscan.io/address/0x655fA98eA9BBcC6A2eB3F3c01F26929Fb3b8aa28)

###

### Misc

* Points Hook: [`0xA386067eB5F7Dc9b731fe1130745b0FB00c615C3`](https://etherscan.io/address/0xA386067eB5F7Dc9b731fe1130745b0FB00c615C3)
* balETH Rate Provider: [`0xd4580a56e715F14Ed9d340Ff30147d66230d44Ba`](https://etherscan.io/address/0xd4580a56e715F14Ed9d340Ff30147d66230d44Ba)

## Calculator Templates

* Aura Template: [`0x594BAa7aD9230084261e40aDfCE95f2ed612898a`](https://etherscan.io/address/0x594BAa7aD9230084261e40aDfCE95f2ed612898a)
* Balancer Comp Template: [`0xF4b143f94eEF97FCB44EEa54C7927ce15f96e23c`](https://etherscan.io/address/0xF4b143f94eEF97FCB44EEa54C7927ce15f96e23c)
* Balancer Gyro Template: [`0x4a3688fA864d42FAbaEa9E364266e81B50730e91`](https://etherscan.io/address/0x4a3688fA864d42FAbaEa9E364266e81B50730e91)
* Balancer Meta Template: [`0x084E65a576949a431F7E8e4C9154D1DDd7F25A0c`](https://etherscan.io/address/0x084E65a576949a431F7E8e4C9154D1DDd7F25A0c)
* cbETH Template: [`0x24d783e5ed8e4A507583e0C79ABf489051069AbB`](https://etherscan.io/address/0x24d783e5ed8e4A507583e0C79ABf489051069AbB)
* Convex Template: [`0xd1E668Ea38c68740eec6ebad453a082211C98709`](https://etherscan.io/address/0xd1E668Ea38c68740eec6ebad453a082211C98709)
* Curve V1 No Rebasing Template: [`0xd48A39a087FC4DD152867C5059c2667eC5Fa0E4d`](https://etherscan.io/address/0xd48A39a087FC4DD152867C5059c2667eC5Fa0E4d)
* Curve V1 Rebasing Locked Template: [`0xCB29D488efcC308c07c3168c63d5E7AEDe4bC3aE`](https://etherscan.io/address/0xCB29D488efcC308c07c3168c63d5E7AEDe4bC3aE)
* Curve V1 Rebasing Template: [`0xf5C49C69ec7735B7baB85c591CA93c8124825ab4`](https://etherscan.io/address/0xf5C49C69ec7735B7baB85c591CA93c8124825ab4)
* Curve V2 No Rebasing Template: [`0xD8eF136051014E89E9Ea6aE32C3cd224778125e4`](https://etherscan.io/address/0xD8eF136051014E89E9Ea6aE32C3cd224778125e4)
* eETH Template: [`0xA87930c4e51Ce635065c9f5356A8578e94D4A71E`](https://etherscan.io/address/0xA87930c4e51Ce635065c9f5356A8578e94D4A71E)
* ETHx Template: [`0x2757f5FB6f62eF4B41B5F6236D1E3a77e15B0C55`](https://etherscan.io/address/0x2757f5FB6f62eF4B41B5F6236D1E3a77e15B0C55)
* ezETH Template: [`0xe3e73139d6B1a2Ce22C34897423AB56EE925b459`](https://etherscan.io/address/0xe3e73139d6B1a2Ce22C34897423AB56EE925b459)
* frxETH Template: [`0xad6d0eCeE007145D76c7a9B9551Af560A718a223`](https://etherscan.io/address/0xad6d0eCeE007145D76c7a9B9551Af560A718a223)
* osETH Template: [`0x3cC4397EE396B49408AE12fd34c7c3B40F257B1b`](https://etherscan.io/address/0x3cC4397EE396B49408AE12fd34c7c3B40F257B1b)
* Proxy Template: [`0x8A26C73f5C4597e086254CB815403b98dc494E53`](https://etherscan.io/address/0x8A26C73f5C4597e086254CB815403b98dc494E53)
* pxETH Template: [`0x37C9B7Fc138A7489C307A7BC6bc1124e3d06296a`](https://etherscan.io/address/0x37C9B7Fc138A7489C307A7BC6bc1124e3d06296a)
* rETH Template: [`0x038516cb9bbc0572c2d55896Ce75F31FaB90FAc1`](https://etherscan.io/address/0x038516cb9bbc0572c2d55896Ce75F31FaB90FAc1)
* rsETH LRT Template: [`0x114ca0Dc51aBd118125F84d15F87E01e7dceFA86`](https://etherscan.io/address/0x114ca0Dc51aBd118125F84d15F87E01e7dceFA86)
* rswETH LRT Template: [`0xe861c6eB5376aDA41bCc238080439724FE15B90f`](https://etherscan.io/address/0xe861c6eB5376aDA41bCc238080439724FE15B90f)
* stETH LST Template: [`0xaea78e6D52A55dAA7EeBeb25068637659E02CEE7`](https://etherscan.io/address/0xaea78e6D52A55dAA7EeBeb25068637659E02CEE7)
* swETH Template: [`0x7Cbbb3Db2FF81B1221d50c8f9b9072348dAc7408`](https://etherscan.io/address/0x7Cbbb3Db2FF81B1221d50c8f9b9072348dAc7408)

## LST/LRT Calculators

* cbETH Calculator: [`0xaB78a570252dd06FDbC1C5C566E842e571d01E08`](https://etherscan.io/address/0xaB78a570252dd06FDbC1C5C566E842e571d01E08)
* eETH Calculator: [`0x4353e181C13f7E970f24016a0762C1af271350BA`](https://etherscan.io/address/0x4353e181C13f7E970f24016a0762C1af271350BA)
* ETHx Calculator: [`0x6D3C5F6670ABe46901De4BD39036cF21d178334C`](https://etherscan.io/address/0x6D3C5F6670ABe46901De4BD39036cF21d178334C)
* ezETH Calculator: [`0xA84cc1d5aD1cDD5fAeb15Aa3f4aC5935D4b263D9`](https://etherscan.io/address/0xA84cc1d5aD1cDD5fAeb15Aa3f4aC5935D4b263D9)
* frxETH Calculator: [`0x449A957490e24e4d915fD5Dcf25Dd5446E787590`](https://etherscan.io/address/0x449A957490e24e4d915fD5Dcf25Dd5446E787590)
* osETH Calculator: [`0xB5aa595C4FE3C297D65bdCDCc6FA48eF8725AEbB`](https://etherscan.io/address/0xB5aa595C4FE3C297D65bdCDCc6FA48eF8725AEbB)
* pxETH Calculator: [`0x9cB562083D29e027F21fAc4D8b66573deA972153`](https://etherscan.io/address/0x9cB562083D29e027F21fAc4D8b66573deA972153)
* rETH Calculator: [`0x9801098EE481ed6806C61A4dE259FBdDD5bb84a8`](https://etherscan.io/address/0x9801098EE481ed6806C61A4dE259FBdDD5bb84a8)
* rsETH Calculator: [`0x840A49a4b83E57718cf67c03D820C938A04FC210`](https://etherscan.io/address/0x840A49a4b83E57718cf67c03D820C938A04FC210)
* rswETH Calculator: [`0xeEdb3dD86F690a8c76006D606Db7951322B6741A`](https://etherscan.io/address/0xeEdb3dD86F690a8c76006D606Db7951322B6741A)
* stETH Calculator: [`0x66A466b838f981B39cF3B3E13E19AF5643Dbad0c`](https://etherscan.io/address/0x66A466b838f981B39cF3B3E13E19AF5643Dbad0c)
* swETH Calculator: [`0x60E98E2dAc20FAab84781076164290Cc31Ce3c9e`](https://etherscan.io/address/0x60E98E2dAc20FAab84781076164290Cc31Ce3c9e)
* weETH Calculator: [`0xDBFB637873D16DC5eFa43DB75Ff846934CaAA43f`](https://etherscan.io/address/0xDBFB637873D16DC5eFa43DB75Ff846934CaAA43f)
* wstETH Calculator: [`0x24864cc03EFD84f9DF0e5F1D23aB69128325931E`](https://etherscan.io/address/0x24864cc03EFD84f9DF0e5F1D23aB69128325931E)

### DEX Calculators

* Balancer rETH/WETH DEX: [`0x66664bd801fF4edF8778BaE66ACF1De9C29a59a4`](https://etherscan.io/address/0x66664bd801fF4edF8778BaE66ACF1De9C29a59a4)
* Balancer Aura rETH/WETH Incentive: [`0x4Ead64090fe1D07B8a2306b2E4897386d5Eb43eA`](https://etherscan.io/address/0x4Ead64090fe1D07B8a2306b2E4897386d5Eb43eA)
* Balancer WETH/osETH DEX: [`0x0e2b7536Ecb785dF0fa43C6622Dd6b670cE39bE4`](https://etherscan.io/address/0x0e2b7536Ecb785dF0fa43C6622Dd6b670cE39bE4)
* Balancer Aura WETH/osETH Incentive: [`0x4e4eb584CCea7eCe23dA46245Daf07457BC48348`](https://etherscan.io/address/0x4e4eb584CCea7eCe23dA46245Daf07457BC48348)
* Balancer wstETH/WETH DEX: [`0x4c4d65167B6c6b112480D2295A35300bEb3A1970`](https://etherscan.io/address/0x4c4d65167B6c6b112480D2295A35300bEb3A1970)
* Balancer Aura wstETH/WETH Incentive: [`0xacdc4a1CD67e7E9fe85F00EC29D5f07B1305829d`](https://etherscan.io/address/0xacdc4a1CD67e7E9fe85F00EC29D5f07B1305829d)
* Balancer wstETH/WETH (Gyro) DEX: [`0xa9B8E439D140E8f2644e1b4D98f3AABdb85702aB`](https://etherscan.io/address/0xa9B8E439D140E8f2644e1b4D98f3AABdb85702aB)
* Balancer Aura wstETH/WETH (Gyro) Incentive: [`0x662e3fCFD4348Ef74fF88C88a6e9f4E4119b018B`](https://etherscan.io/address/0x662e3fCFD4348Ef74fF88C88a6e9f4E4119b018B)
* Balancer wstETH/cbETH (Gyro) DEX: [`0x943673e7996a5D2Ac2E945d0eABF1aa39913e9D2`](https://etherscan.io/address/0x943673e7996a5D2Ac2E945d0eABF1aa39913e9D2)
* Balancer Aura wstETH/cbETH (Gyro) Incentive: [`0xB57e41106Fc06a5c0b6ACCc8cF8F72dD25fb6621`](https://etherscan.io/address/0xB57e41106Fc06a5c0b6ACCc8cF8F72dD25fb6621)
* Balancer wstETH/ETHx DEX: [`0x63B0aC87bDa3Ee6D13802A93FC13918Df5832aE9`](https://etherscan.io/address/0x63B0aC87bDa3Ee6D13802A93FC13918Df5832aE9)
* Balancer Aura wstETH/ETHx Incentive: [`0x041679ACb4088288178589c059543b56ce74ea07`](https://etherscan.io/address/0x041679ACb4088288178589c059543b56ce74ea07)
* Balancer pxETH/WETH DEX: [`0x2dF5D9eF6D48A456bA5edC444dd5de7ad7AB0981`](https://etherscan.io/address/0x2dF5D9eF6D48A456bA5edC444dd5de7ad7AB0981)
* Balancer Aura pxETH/WETH Incentive: [`0x5968662CCfb6792bB4a0E4f45Cf303b85fB2CC43`](https://etherscan.io/address/0x5968662CCfb6792bB4a0E4f45Cf303b85fB2CC43)
* Balancer ezETH/WETH DEX: [`0xADF54e42990f5B7d9f423D66D8652B53812Dd5A6`](https://etherscan.io/address/0xADF54e42990f5B7d9f423D66D8652B53812Dd5A6)
* Balancer Aura ezETH/WETH Incentive: [`0xD09bDE15c0BdD222EdcD79912c0636e451e59c71`](https://etherscan.io/address/0xD09bDE15c0BdD222EdcD79912c0636e451e59c71)
* Balancer rETH/weETH DEX: [`0xa639d9C66dFa096d5A5a8Bf0BBb482a0c295193c`](https://etherscan.io/address/0xa639d9C66dFa096d5A5a8Bf0BBb482a0c295193c)
* Balancer Aura rETH/weETH Incentive: [`0x0f5d9c23D365c114D3feBAe6CB2edbB06b65ACAD`](https://etherscan.io/address/0x0f5d9c23D365c114D3feBAe6CB2edbB06b65ACAD)
* Balancer ezETH/weETH/rswETH DEX: [`0xb5652e10eB7E93Eec7DFF8909A99FC3e6Aea6866`](https://etherscan.io/address/0xb5652e10eB7E93Eec7DFF8909A99FC3e6Aea6866)
* Balancer Aura ezETH/weETH/rswETH Incentive: [`0x5Ac9DC1ceF6cBD9d5B8a604e2d3B7D93F59D7F40`](https://etherscan.io/address/0x5Ac9DC1ceF6cBD9d5B8a604e2d3B7D93F59D7F40)
* Balancer rsETH/WETH DEX: [`0xab0b5440E1bBdd3b6309Ea82364b2a49DB27F9a5`](https://etherscan.io/address/0xab0b5440E1bBdd3b6309Ea82364b2a49DB27F9a5)
* Balancer Aura rsETH/WETH Incentive: [`0xddFD0A9a979182fA45E0024fDb101Dd8079D84B2`](https://etherscan.io/address/0xddFD0A9a979182fA45E0024fDb101Dd8079D84B2)
* Balancer rsETH/ETHx DEX: [`0x4E79861b9026109a9C5769631C182b3211BD70e0`](https://etherscan.io/address/0x4E79861b9026109a9C5769631C182b3211BD70e0)
* Balancer Aura rsETH/ETHx Incentive: [`0xA4349B50D2E64b24B4c35b2C24ad06177508f3A0`](https://etherscan.io/address/0xA4349B50D2E64b24B4c35b2C24ad06177508f3A0)
* Curve osETH/rETH DEX: [`0x145e12608C133C2b9062D10E33305d153aC41879`](https://etherscan.io/address/0x145e12608C133C2b9062D10E33305d153aC41879)
* Curve Convex osETH/rETH Incentive: [`0x74C3B0547BBCAc9584d072c6FBAc543267269Ab7`](https://etherscan.io/address/0x74C3B0547BBCAc9584d072c6FBAc543267269Ab7)
* Curve ETH/ETHx DEX: [`0xB8E7a5f5f5324AbD46f3Bd92c814C9B9719B8c2a`](https://etherscan.io/address/0xB8E7a5f5f5324AbD46f3Bd92c814C9B9719B8c2a)
* Curve Convex ETH/ETHx Incentive: [`0x4bbFa11223315a21b51F37cF9dd3Bd6200332276`](https://etherscan.io/address/0x4bbFa11223315a21b51F37cF9dd3Bd6200332276)
* Curve WETH/rETH DEX: [`0x94b58E201EAE7434B9FdCEa12E6B0B4fB26C7a69`](https://etherscan.io/address/0x94b58E201EAE7434B9FdCEa12E6B0B4fB26C7a69)
* Curve Convex WETH/rETH Incentive: [`0x355f39596a4bc907A84dBF8F627C7CA2BA13dE91`](https://etherscan.io/address/0x355f39596a4bc907A84dBF8F627C7CA2BA13dE91)
* Curve pxETH/stETH DEX: [`0x54939860E3D185Cd983421ace105Ace79156E3C8`](https://etherscan.io/address/0x54939860E3D185Cd983421ace105Ace79156E3C8)
* Curve Convex pxETH/stETH Incentive: [`0x83B6945E843A22Bbda6bEAA06E88Bc1312301D7A`](https://etherscan.io/address/0x83B6945E843A22Bbda6bEAA06E88Bc1312301D7A)
* Curve WETH/pxETH DEX: [`0xd545EE3Ba242E89FA45Caa68665898BAF4201004`](https://etherscan.io/address/0xd545EE3Ba242E89FA45Caa68665898BAF4201004)
* Curve Convex WETH/pxETH Incentive: [`0xF7370f9bF50985209Efe114096cD0177ba4Ba9d7`](https://etherscan.io/address/0xF7370f9bF50985209Efe114096cD0177ba4Ba9d7)
* Curve WETH/frxETH DEX: [`0xd6884a251E3D116344100e76917Df3C535eE6154`](https://etherscan.io/address/0xd6884a251E3D116344100e76917Df3C535eE6154)
* Curve Convex WETH/frxETH Incentive: [`0xbfDF3A66a97Ae5e168FcE478bE0bE9804c163841`](https://etherscan.io/address/0xbfDF3A66a97Ae5e168FcE478bE0bE9804c163841)
* Curve WETH/weETHng DEX: [`0x542A6b32e08980a8e9f4cd778805CFcB7A99f0Fa`](https://etherscan.io/address/0x542A6b32e08980a8e9f4cd778805CFcB7A99f0Fa)
* Curve Convex WETH/weETHng Incentive: [`0xF25b36c77e869b01477860a0EABc4f4Ff745EAC3`](https://etherscan.io/address/0xF25b36c77e869b01477860a0EABc4f4Ff745EAC3)

### Destinations

* Balancer Aura rETH/WETH: [`0x867991C7737Ccbb152aE5a7E6EDB05cA0670717E`](https://etherscan.io/address/0x867991C7737Ccbb152aE5a7E6EDB05cA0670717E)
* Balancer Aura WETH/osETH: [`0xFDa49984eb4eA4075b8b451032849347C633E94b`](https://etherscan.io/address/0xFDa49984eb4eA4075b8b451032849347C633E94b)
* Balancer Aura wstETH/WETH: [`0x5A4B544B9734930DDC587c9a2f093dC5058A4f4D`](https://etherscan.io/address/0x5A4B544B9734930DDC587c9a2f093dC5058A4f4D)
* Balancer Aura wstETH/WETH (Gyro): [`0xA1b9297525388BA3985413D982863f31e2A29d05`](https://etherscan.io/address/0xA1b9297525388BA3985413D982863f31e2A29d05)
* Balancer Aura wstETH/cbETH (Gyro): [`0x92294A62D6D9F0FbE30Ba3B543edb1806561baD7`](https://etherscan.io/address/0x92294A62D6D9F0FbE30Ba3B543edb1806561baD7)
* Balancer Aura wstETH/ETHx: [`0xdfE3fA7027E84f59b266459C567278C79fe86f0C`](https://etherscan.io/address/0xdfE3fA7027E84f59b266459C567278C79fe86f0C)
* Balancer Aura pxETH/WETH: [`0xc4Eb861e7b66f593482a3D7E8adc314f6eEDA30B`](https://etherscan.io/address/0xc4Eb861e7b66f593482a3D7E8adc314f6eEDA30B)
* Balancer Aura ezETH/WETH: [`0x2f2CC1bf461413014741dD68481dB4a3686DAC3D`](https://etherscan.io/address/0x2f2CC1bf461413014741dD68481dB4a3686DAC3D)
* Balancer Aura rETH/weETH: [`0x40219bBda953ca811d2D0168Dc806a96b84791d9`](https://etherscan.io/address/0x40219bBda953ca811d2D0168Dc806a96b84791d9)
* Balancer Aura ezETH/weETH/rswETH: [`0xC9b5D82652a1C8214b0971A004983d0EEeDD751C`](https://etherscan.io/address/0xC9b5D82652a1C8214b0971A004983d0EEeDD751C)
* Balancer Aura rsETH/WETH: [`0xf9779aEF9f77e78C857CB4A068c65CcBee25BAAc`](https://etherscan.io/address/0xf9779aEF9f77e78C857CB4A068c65CcBee25BAAc)
* Balancer Aura rsETH/ETHx: [`0x60339056EC88996e41757E05a798310E46972cca`](https://etherscan.io/address/0x60339056EC88996e41757E05a798310E46972cca)
* Curve osETH/rETH: [`0x3F55eedDe51504E6Ed0ec30E8289b4Da11EdB7F9`](https://etherscan.io/address/0x3F55eedDe51504E6Ed0ec30E8289b4Da11EdB7F9)
* Curve ETH/ETHx: [`0x1Ea622fa030e4a78F4CC2f305dd3c08DA3F08573`](https://etherscan.io/address/0x1Ea622fa030e4a78F4CC2f305dd3c08DA3F08573)
* Curve WETH/rETH: [`0x2B08137BeABd2454AD3631DEB754F97C5c93eB78`](https://etherscan.io/address/0x2B08137BeABd2454AD3631DEB754F97C5c93eB78)
* Curve pxETH/stETH: [`0xe4433D00Cf48BFE0C672d9949F2cd2c008bffC04`](https://etherscan.io/address/0xe4433D00Cf48BFE0C672d9949F2cd2c008bffC04)
* Curve WETH/pxETH: [`0xbA1462f43c6f60ebD1C62735c94E428aD073E01A`](https://etherscan.io/address/0xbA1462f43c6f60ebD1C62735c94E428aD073E01A)
* Curve WETH/frxETH: [`0x356c79Ab2B2cEFAB685004CE827146058A6c3e77`](https://etherscan.io/address/0x356c79Ab2B2cEFAB685004CE827146058A6c3e77)
* Curve WETH/weETHng: [`0x5c6aeb9ef0d5BbA4E6691f381003503FD0D45126`](https://etherscan.io/address/0x5c6aeb9ef0d5BbA4E6691f381003503FD0D45126)
* Curve DOLA/sUSDe Dest Vault: [`0x0091Fec1B75013D1b83f4Bb82f0BEC4E256758CB`](https://etherscan.io/address/0x0091Fec1B75013D1b83f4Bb82f0BEC4E256758CB)
* Curve DOLA/sUSDS Dest Vault: [`0x2fa4C8a4aCda7746778dbd2f3B2Fc5ca41D9b171`](https://etherscan.io/address/0x2fa4C8a4aCda7746778dbd2f3B2Fc5ca41D9b171)
* Curve DOLA/USR Dest Vault: [`0x88d0e045d91847a81e60f65073E4bC4FDEF90aB0`](https://etherscan.io/address/0x88d0e045d91847a81e60f65073E4bC4FDEF90aB0)
* Curve DOLA/deUSD Dest Vault: [`0x737f2e3a0958EF0fA77aEC405db60f13CB7f004b`](https://etherscan.io/address/0x737f2e3a0958EF0fA77aEC405db60f13CB7f004b)
* Curve reUSD/DOLA Dest Vault: [`0x9828b1a3742457D70cE428ddd3Aa51f84ffb37F2`](https://etherscan.io/address/0x9828b1a3742457D70cE428ddd3Aa51f84ffb37F2)
* Curve DOLA/scrvUSD Dest Vault: [`0x23032a1ef0c082e619E3e64725E9D3b39c4e9d8C`](https://etherscan.io/address/0x23032a1ef0c082e619E3e64725E9D3b39c4e9d8C)
* Curve sDOLA/alUSD Dest Vault: [`0xaFd498862d5D0B816D7cE150959Ba18F5C706a90`](https://etherscan.io/address/0xaFd498862d5D0B816D7cE150959Ba18F5C706a90)
* Curve scrvUSD/DOLA Dest Vault: [`0xF4CeDDf4e2AEc1aa6b4ef2c64739eCaC5C948fA2`](https://etherscan.io/address/0xF4CeDDf4e2AEc1aa6b4ef2c64739eCaC5C948fA2)
* ERC20 sDOLA Dest Vault: [`0x116b3e86f2b04c21605c5fC4b95Ba6A82dBF8F3E`](https://etherscan.io/address/0x116b3e86f2b04c21605c5fC4b95Ba6A82dBF8F3E)
  {% endtab %}

{% tab title="Base" %}

### Core System Registry

* System Registry: [`0x18Dc926095A7A007C01Ef836683Fdef4c4371b4e`](https://basescan.org/address/0x18Dc926095A7A007C01Ef836683Fdef4c4371b4e)
* Access Controller: [`0x20Dfa88e77D4eEB644F68C5752E7D1A3c21F27e8`](https://basescan.org/address/0x20Dfa88e77D4eEB644F68C5752E7D1A3c21F27e8)
* Sequencer Checker: [`0x564c39C2C5D120724DA31d1428773c1AEaD23535`](https://basescan.org/address/0x564c39C2C5D120724DA31d1428773c1AEaD23535)
* System Security: [`0x8C58aFf94D7fCB0e8daC43fC3713fcddac8b4006`](https://basescan.org/address/0x8C58aFf94D7fCB0e8daC43fC3713fcddac8b4006)
* Autopool Registry: [`0x4fE7916A10B15DADEFc59D06AC81757112b1feCE`](https://basescan.org/address/0x4fE7916A10B15DADEFc59D06AC81757112b1feCE)
* Destination Template Registry: [`0xA1afC8aAF80dF8Ceb179E99Bb1A8Fb4D26095BA1`](https://basescan.org/address/0xA1afC8aAF80dF8Ceb179E99Bb1A8Fb4D26095BA1)
* Destination Vault Registry: [`0xBBBB6E844EEd5952B44C2063670093E27E21735f`](https://basescan.org/address/0xBBBB6E844EEd5952B44C2063670093E27E21735f)
* Destination Vault Factory: [`0xF34F7975Df6CB3dd95849A6c3b9343196AE9AbB6`](https://basescan.org/address/0xF34F7975Df6CB3dd95849A6c3b9343196AE9AbB6)
* Swap Router: [`0x23783E62282ca68fd5C3Fb45Fc7AD01F21B85666`](https://basescan.org/address/0x23783E62282ca68fd5C3Fb45Fc7AD01F21B85666)
* Async Swapper Registry: [`0x3750d3315466A132eE7D10eBEe67f28e19577472`](https://basescan.org/address/0x3750d3315466A132eE7D10eBEe67f28e19577472)
* Root Price Oracle: [`0xBCf67d1d643C53E9C2f84aCBd830A5EDC2661795`](https://basescan.org/address/0xBCf67d1d643C53E9C2f84aCBd830A5EDC2661795)
* Stats Calculator Registry: [`0x22dd2189728B40409476F4F80CA8f2f6BdB217D2`](https://basescan.org/address/0x22dd2189728B40409476F4F80CA8f2f6BdB217D2)
* Stats Calculator Factory: [`0xD82664A9B7A766B2c311B76C9e4384E8838B0a1C`](https://basescan.org/address/0xD82664A9B7A766B2c311B76C9e4384E8838B0a1C)
* Lens: [`0xaF05c205444c5884F53492500Bed22A8f617Aa9C`](https://basescan.org/address/0xaF05c205444c5884F53492500Bed22A8f617Aa9C)
* Incentive Pricing Stats: [`0xF28213d5cbc9f4cfB371599D25E232978848090d`](https://basescan.org/address/0xF28213d5cbc9f4cfB371599D25E232978848090d)
* Receiving Router: [`0x32796698388fBC64281dEa9Fc4070DF80a12267E`](https://basescan.org/address/0x32796698388fBC64281dEa9Fc4070DF80a12267E)
* Eth Per Token Store: [`0x57831780565ae1526eD1cc2296C1143B3ad68Dfe`](https://basescan.org/address/0x57831780565ae1526eD1cc2296C1143B3ad68Dfe)
* Autopilot Router: [`0xa18B89225491230fDb1883cFbda65E7931606931`](https://basescan.org/address/0xa18B89225491230fDb1883cFbda65E7931606931)

### Autopools

* baseETH address: [`0xAADf01DD90aE0A6Bb9Eb908294658037096E0404`](https://basescan.org/address/0xAADf01DD90aE0A6Bb9Eb908294658037096E0404)
  * baseETH Rewarder: [`0xb592c1539AC22EdD9784eA4d6a22199C16314498`](https://basescan.org/address/0xb592c1539AC22EdD9784eA4d6a22199C16314498)
* baseUSD: [`0x9c6864105AEC23388C89600046213a44C384c831`](https://basescan.org/address/0x9c6864105AEC23388C89600046213a44C384c831)
  * baseUSD Rewarder: [`0x4103A467166bbbDA3694AB739b391db6c6630595`](https://basescan.org/address/0x4103A467166bbbDA3694AB739b391db6c6630595)
* baseEUR: [`0xeb042DEE6f7Ff3B45eF0A71686653D168FB02477`](https://basescan.org/address/0xeb042DEE6f7Ff3B45eF0A71686653D168FB02477)
  * Rewarder: [`0x69a63DDB162a0251248f6c7d22902083Ca3E0522`](https://basescan.org/address/0x69a63DDB162a0251248f6c7d22902083Ca3E0522)

### Swap Router Swappers

* Balancer Swapper: [`0x4EfCc03e33470Cfef7B2666EfF67667F4173918B`](https://basescan.org/address/0x4EfCc03e33470Cfef7B2666EfF67667F4173918B)
* Uni V3 Swapper: [`0x0915f530eF9A52AAbAE9ac22DC2ecf5265Da6E71`](https://basescan.org/address/0x0915f530eF9A52AAbAE9ac22DC2ecf5265Da6E71)
  * Used for Aerodrome V3
* Uni V3 L2 Swapper: [`0xe4FeF293650442991C695A055f54D2A54868CA11`](https://basescan.org/address/0xe4FeF293650442991C695A055f54D2A54868CA11)
* Aerodrome V2 Swapper: [`0x2bb11C6407Bb9Dcbb5b776F789371DE5aaCA44a5`](https://basescan.org/address/0x2bb11C6407Bb9Dcbb5b776F789371DE5aaCA44a5)

### Misc

* Incentive Harvester: [`0x1BFCDfa2722c17959ACD1306dF1f0406A7d5BE5e`](https://basescan.org/address/0x1BFCDfa2722c17959ACD1306dF1f0406A7d5BE5e)
* Destination Incentive Checker: [`0xc3FF90869ecb5Ce2a4153EEF6a5dEe08f6598323`](https://basescan.org/address/0xc3FF90869ecb5Ce2a4153EEF6a5dEe08f6598323)

### Liquidation + Async Swappers

* Liquidation Row: [`0xE2F00bbC3E5ddeCfBD95e618CE36b49F38881d4f`](https://basescan.org/address/0xE2F00bbC3E5ddeCfBD95e618CE36b49F38881d4f)
* Liquidation Executor: [`0x0294D71B2C9b88D10F6d3286f5b25026147b2C8c`](https://basescan.org/address/0x0294D71B2C9b88D10F6d3286f5b25026147b2C8c)

### Oracles

* ETH Pegged Oracle: [`0xe33703C5C1E1A5415B260F8C8eb8A2f49e746Aa9`](https://basescan.org/address/0xe33703C5C1E1A5415B260F8C8eb8A2f49e746Aa9)
* Chainlink Oracle: [`0xc7939c8337d01F32B669C6a16f20eD4a8E11641C`](https://basescan.org/address/0xc7939c8337d01F32B669C6a16f20eD4a8E11641C)
* Balancer Composable Oracle: [`0x859dDA370dDb15Bd59361CC756496E51b729399b`](https://basescan.org/address/0x859dDA370dDb15Bd59361CC756496E51b729399b)
* Redstone Oracle: [`0x9AB4b68C3a3DdA0Cdf4Ec5C0ab9da2661Bdad1ee`](https://basescan.org/address/0x9AB4b68C3a3DdA0Cdf4Ec5C0ab9da2661Bdad1ee)
* Custom Set Oracle: [`0x92C726da82389e0E9E81575960411BD6E8EAE3Ef`](https://basescan.org/address/0x92C726da82389e0E9E81575960411BD6E8EAE3Ef)
* Aerodrome Oracle: [`0x099A7e3Ff39024C3d1E87568b4edA59A938900f4`](https://basescan.org/address/0x099A7e3Ff39024C3d1E87568b4edA59A938900f4)
* Zero Oracle: [`0x01554657fa8c37161CAd0fdc090e6a26Aea1D14d`](https://basescan.org/address/0x01554657fa8c37161CAd0fdc090e6a26Aea1D14d)

### Service Accounts

* Custom Oracles: [`0x8CD98E74A5ef4020bcd6D0397EFe42C34Afa5f23`](https://basescan.org/address/0x8CD98E74A5ef4020bcd6D0397EFe42C34Afa5f23)
* Debt Reporting: [`0xb2A71EF7649B95d7d5A3b8084e619C381Fa79413`](https://basescan.org/address/0xb2A71EF7649B95d7d5A3b8084e619C381Fa79413)
* Swap Routes: [`0xf772Fcd65aCAE9814e6E4b228e554c1054aE2765`](https://basescan.org/address/0xf772Fcd65aCAE9814e6E4b228e554c1054aE2765)
* Incentive Harvester: [`0xcA7d8b1F4398D11b302853d7fFd5D2b65073dE11`](https://basescan.org/address/0xcA7d8b1F4398D11b302853d7fFd5D2b65073dE11)
* Reward Liquidator: [`0xdEA337283410bAcC9418e13CbbB3b8F03dD2FBf7`](https://basescan.org/address/0xdEA337283410bAcC9418e13CbbB3b8F03dD2FBf7)
* Solver Exec: [`0x91517Ba3793394008c461498de4899EEc2DB1658`](https://basescan.org/address/0x91517Ba3793394008c461498de4899EEc2DB1658)

### Chainlink Upkeeps

* Chainlink Incentive Prices Upkeep: [`0x08b0617747ad7A839396a909876104E392713E4d`](https://basescan.org/address/0x08b0617747ad7A839396a909876104E392713E4d)
* Chainlink Stats Upkeep: [`0x30f285c7cB4304e82302ce06F24E285BD527c637`](https://basescan.org/address/0x30f285c7cB4304e82302ce06F24E285BD527c637)

### LST/LRT Calculator Templates

* Bridged LST Template: [`0x4Cb4b14128C868f35AFE9cac7c23cf821aA64F99`](https://basescan.org/address/0x4Cb4b14128C868f35AFE9cac7c23cf821aA64F99)

### DEX/Incentive Calculator Templates

* Aura Template: [`0x9254926B61C205e8b64ED00681fE0b2de94B62f3`](https://basescan.org/address/0x9254926B61C205e8b64ED00681fE0b2de94B62f3)
* Balancer Comp Template: [`0xBd0Fe980455e52e4D60c4EACBd6bC19A5cf29F6A`](https://basescan.org/address/0xBd0Fe980455e52e4D60c4EACBd6bC19A5cf29F6A)
* Aerodrome Incentive Template: [`0xc8756b85C5e7C2AB0Aa675Fd606aa91E14E6EF01`](https://basescan.org/address/0xc8756b85C5e7C2AB0Aa675Fd606aa91E14E6EF01)
* Aerodrome Dex Template: [`0xcef50Bf75ed027b8bAE5C49562B3f27B4f253985`](https://basescan.org/address/0xcef50Bf75ed027b8bAE5C49562B3f27B4f253985)

### LST/LRT Calculators

* rETH LST Calculator: [`0xb5182945cAA19E3a9Fa35e70502fC3269d1fA9EA`](https://basescan.org/address/0xb5182945cAA19E3a9Fa35e70502fC3269d1fA9EA)
* cbETH LST Calculator: [`0xB081af21468dEb33aaB9E37eAe6F5004Cc1cBDb0`](https://basescan.org/address/0xB081af21468dEb33aaB9E37eAe6F5004Cc1cBDb0)
* wstETH LST Calculator: [`0xA80b38Da84e7C7a094E6d0093DE374A00E892934`](https://basescan.org/address/0xA80b38Da84e7C7a094E6d0093DE374A00E892934)
* weETH LST Calculator: [`0x58897eC6b7d7102BB24a29e99a14A6d9E517943e`](https://basescan.org/address/0x58897eC6b7d7102BB24a29e99a14A6d9E517943e)
* wrsETH LST Calculator: [`0xbaF2EE1C91cc8a00B386b14D65bdb4918604E1a7`](https://basescan.org/address/0xbaF2EE1C91cc8a00B386b14D65bdb4918604E1a7)

### DEX/Incentive Calculators

* Balancer WETH/rETH: [`0x4fc45f7C2FEB07d5698cC12717f5b8D4f30002A9`](https://basescan.org/address/0x4fc45f7C2FEB07d5698cC12717f5b8D4f30002A9)
* Balancer Aura WETH/rETH Incentive: [`0xb9e9818E551f676d6BE547Ed07e5875dC702B6E8`](https://basescan.org/address/0xb9e9818E551f676d6BE547Ed07e5875dC702B6E8)
* Balancer weETH/WETH: [`0x800F535CE3F430B1F5475575d7D2Ff3A164820b3`](https://basescan.org/address/0x800F535CE3F430B1F5475575d7D2Ff3A164820b3)
* Balancer Aura weETH/WETH Incentive: [`0x7c4b58Eaa93005162Bc80285af2003517213c539`](https://basescan.org/address/0x7c4b58Eaa93005162Bc80285af2003517213c539)
* Aerodrome vAMM-weETH/WETH: [`0xC7B711A5d1fCC19195E82E8c0D827e2E0bD2Bd10`](https://basescan.org/address/0xC7B711A5d1fCC19195E82E8c0D827e2E0bD2Bd10)
* Aerodrome vAMM-weETH/WETH Incentive: [`0xd675D868c751A5B1F331Bcf5dCD1Fe7D45c2e76B`](https://basescan.org/address/0xd675D868c751A5B1F331Bcf5dCD1Fe7D45c2e76B)
* Aerodrome vAMM-WETH/wstETH: [`0xd9B54d16a2cD15Abe6E8A9B8B596239A7f8042E3`](https://basescan.org/address/0xd9B54d16a2cD15Abe6E8A9B8B596239A7f8042E3)
* Aerodrome vAMM-WETH/wstETH Incentive: [`0xeaa026495601c47BFEb4bb6501c11Ba41a1ac028`](https://basescan.org/address/0xeaa026495601c47BFEb4bb6501c11Ba41a1ac028)
* Aerodrome vAMM-WETH/wrsETH: [`0xE40523f7Bd5799b3C62921357b104f58C4A7c240`](https://basescan.org/address/0xE40523f7Bd5799b3C62921357b104f58C4A7c240)
* Aerodrome vAMM-WETH/wrsETH Incentive: [`0x9813E3091278f41cD6B2686FF83255F97889F3e3`](https://basescan.org/address/0x9813E3091278f41cD6B2686FF83255F97889F3e3)
* Aerodrome vAMM-cbETH/WETH: [`0xb02cb15597E214b9A843CCFf9EEfe628C057184e`](https://basescan.org/address/0xb02cb15597E214b9A843CCFf9EEfe628C057184e)
* Aerodrome vAMM-cbETH/WETH Incentive: [`0xe923f84CBbdCE6D12C7987511C0B2C122f425318`](https://basescan.org/address/0xe923f84CBbdCE6D12C7987511C0B2C122f425318)
* Balancer Gyro cbETH/wstETH: [`0x9d95E1fEcd950110Ab1126Cc6ed3C87C61e39e33`](https://basescan.org/address/0x9d95E1fEcd950110Ab1126Cc6ed3C87C61e39e33)
* Balancer Gyro cbETH/wstETH Incentive: [`0xC5A9170d151Cfea07489bd9dB5ECf20B5b7654D4`](https://basescan.org/address/0xC5A9170d151Cfea07489bd9dB5ECf20B5b7654D4)

### Autopool Templates

* Autopool Template: [`0x2ab4a3A8224726cBAA91d6b04D212979F06efdF9`](https://basescan.org/address/0x2ab4a3A8224726cBAA91d6b04D212979F06efdF9)
* AutopoolETH Factory: [`0x78A7c45E3cC7B9567b4803AEAF9b33bC8c898451`](https://basescan.org/address/0x78A7c45E3cC7B9567b4803AEAF9b33bC8c898451)
* Strategy Template (No Hook): [`0xb111C5F02A04E1Bba747b6FF622F73Cf2eC2D9B0`](https://basescan.org/address/0xb111C5F02A04E1Bba747b6FF622F73Cf2eC2D9B0)

### Destination Vault Templates

* Balancer Aura: [`0x2A7a163168682f58a5294089b7EB87A65d92b1ed`](https://basescan.org/address/0x2A7a163168682f58a5294089b7EB87A65d92b1ed)
* Aerodrome: [`0xDBD14969B9313E5BFdfeD2C7A29e813E6f02C627`](https://basescan.org/address/0xDBD14969B9313E5BFdfeD2C7A29e813E6f02C627)
* Bal Gyro Aura: [`0xee5E7575Df9db1446f9D601769F448Bb4a10F3f7`](https://basescan.org/address/0xee5E7575Df9db1446f9D601769F448Bb4a10F3f7)

### Destination Vaults

* Balancer Aura rETH/WETH: [`0xa6EFB95B7393cB419B48A933273F49b6bb48dd5D`](https://basescan.org/address/0xa6EFB95B7393cB419B48A933273F49b6bb48dd5D)
* Balancer Aura weETH/WETH: [`0xb3723E69D6e4553239d7dAf514bF8ff7998500E0`](https://basescan.org/address/0xb3723E69D6e4553239d7dAf514bF8ff7998500E0)
* Aerodrome vAMM-weETH/WETH: [`0x945a4f719018edBa445ca67bDa43663C815835Ad`](https://basescan.org/address/0x945a4f719018edBa445ca67bDa43663C815835Ad)
* Aerodrome vAMM-WETH/wstETH: [`0x58C2233399B85b53C5506f78eAaae9b0DBA1eD3E`](https://basescan.org/address/0x58C2233399B85b53C5506f78eAaae9b0DBA1eD3E)
* Aerodrome vAMM-WETH/wrsETH: [`0xA94031Ed4b316B043464FDd5482877F42A39845a`](https://basescan.org/address/0xA94031Ed4b316B043464FDd5482877F42A39845a)
* Aerodrome vAMM-cbETH/WETH: [`0xd18db4dD6aF6A7536aD7F863C136463681e0CdAD`](https://basescan.org/address/0xd18db4dD6aF6A7536aD7F863C136463681e0CdAD)
* Balancer Aura Gyro cbETH/wstETH: [`0xBd137c56f3116E5c36753037a784FF844F84F59c`](https://basescan.org/address/0xBd137c56f3116E5c36753037a784FF844F84F59c)
  {% endtab %}

{% tab title="Arbitrum" %}

### Core System Contracts

* System Registry: [`0xBFd8E6C9bF2CD5466f5651746f8E946A6C7b4220`](https://arbiscan.io/address/0xBFd8E6C9bF2CD5466f5651746f8E946A6C7b4220)
* Access Controller: [`0x7eC41019b6Fb853511DF54982Ae17cBF3b4Fd6b2`](https://arbiscan.io/address/0x7eC41019b6Fb853511DF54982Ae17cBF3b4Fd6b2)
* Sequencer Checker: [`0x05AbaA1882f628c0E6542ba0E90ab20fc01f23F4`](https://arbiscan.io/address/0x05AbaA1882f628c0E6542ba0E90ab20fc01f23F4)
* System Security: [`0xE7EeB14De91887A4524d8416203e8aee0796cf99`](https://arbiscan.io/address/0xE7EeB14De91887A4524d8416203e8aee0796cf99)
* Autopool Registry: [`0xc3b8F578c25bE230A2C0f56Cb466e7B8c6c9D268`](https://arbiscan.io/address/0xc3b8F578c25bE230A2C0f56Cb466e7B8c6c9D268)
* Destination Template Registry: [`0x95b5F1AbcE00b345990d1Ec0152b416cD143C58e`](https://arbiscan.io/address/0x95b5F1AbcE00b345990d1Ec0152b416cD143C58e)
* Destination Vault Registry: [`0x8d75A2b774277370d9dC8c034f23003B29032B4B`](https://arbiscan.io/address/0x8d75A2b774277370d9dC8c034f23003B29032B4B)
* Destination Vault Factory: [`0xD6683672269B6A109a51825E71A015678559225a`](https://arbiscan.io/address/0xD6683672269B6A109a51825E71A015678559225a)
* Swap Router: [`0x096f44F9fbBE6116dE5Db5954De776fb8733e59a`](https://arbiscan.io/address/0x096f44F9fbBE6116dE5Db5954De776fb8733e59a)
* Async Swapper Registry: [`0xb45bD07B916Cc3544ab9cD54F812eD8D88BfAbba`](https://arbiscan.io/address/0xb45bD07B916Cc3544ab9cD54F812eD8D88BfAbba)
* Root Price Oracle: [`0xe84CEa5553CC9D65166A7850DAB2E7712072D97F`](https://arbiscan.io/address/0xe84CEa5553CC9D65166A7850DAB2E7712072D97F)
* Curve Resolver: [`0xE0ebd6BdeEe70AF91D14e49d869e3746CB05A5f8`](https://arbiscan.io/address/0xE0ebd6BdeEe70AF91D14e49d869e3746CB05A5f8)
* Lens: [`0x590A31453390A1bB266672156A87eFB1302FC754`](https://arbiscan.io/address/0x590A31453390A1bB266672156A87eFB1302FC754)
* Autopilot Router: [`0x27A9c16ef2dC44a7BF6dF4D115fE4C27D87621Ad`](https://arbiscan.io/address/0x27A9c16ef2dC44a7BF6dF4D115fE4C27D87621Ad)

### Autopools

* arbUSD: [`0xf63b7F49B4f5Dc5D0e7e583Cfd79DC64E646320c`](https://arbiscan.io/address/0xf63b7F49B4f5Dc5D0e7e583Cfd79DC64E646320c)
  * Rewarder: [`0xf6Cc563B93F8E678F696FAC632e41b550CB09540`](https://arbiscan.io/address/0xf6Cc563B93F8E678F696FAC632e41b550CB09540)

#### Hooks

* Lst Price Hook: [`0x67ae7b7d81De471802FbAcdC83A4a6f16fCAFBc0`](https://arbiscan.io/address/0x67ae7b7d81De471802FbAcdC83A4a6f16fCAFBc0)
* Max Value Slippage Hook: [`0x6404Da4cd966afa35FBf2B1664278060e144a402`](https://arbiscan.io/address/0x6404Da4cd966afa35FBf2B1664278060e144a402)
* Min Time Gap Hook: [`0x09D0D6a48545e959b230600966D93600fAb50322`](https://arbiscan.io/address/0x09D0D6a48545e959b230600966D93600fAb50322)
* Nav Lookback Hook: [`0x9717E1B7c338aDeD95Fd4bDa0fC5fc1FCD756F8B`](https://arbiscan.io/address/0x9717E1B7c338aDeD95Fd4bDa0fC5fc1FCD756F8B)
* Slippage Budget Hook: [`0x8e9aC280876826F687e509CE4A0f55ff352d402d`](https://arbiscan.io/address/0x8e9aC280876826F687e509CE4A0f55ff352d402d)

#### Templates + Owners

* USDC Autopool Template: [`0x12dB19359159E8AB0822506aDf15D4d8DBFF66c3`](https://arbiscan.io/address/0x12dB19359159E8AB0822506aDf15D4d8DBFF66c3)
* USDC Autopool Factory: [`0xc08F3906E1291F4A470528AAE9F89C14DfA917a7`](https://arbiscan.io/address/0xc08F3906E1291F4A470528AAE9F89C14DfA917a7)
* USDC Autopool Factory Admin: [`0xbFD6378545d118E8fB26F633D8f3b32bdA047E9F`](https://arbiscan.io/address/0xbFD6378545d118E8fB26F633D8f3b32bdA047E9F)

### Owners

* DAO Owner Multisig - [`0x1Bb9231F96A5420858d273c3e311f0AffC23cdc0`](https://app.safe.global/settings/setup?safe=arb1:0x1Bb9231F96A5420858d273c3e311f0AffC23cdc0)
* AP Dev Owner Multisig - [`0xa9900B2d550c406d1Cf58DA27228Feeef21D447b`](https://app.safe.global/transactions/queue?safe=arb1:0xa9900B2d550c406d1Cf58DA27228Feeef21D447b)
* Pausing Ops Multisig - [`0x127563761083d2Ac7794c17d04E17393D8Ad9013`](https://app.safe.global/transactions/queue?safe=arb1:0x127563761083d2Ac7794c17d04E17393D8Ad9013)

### Oracles

* Eth Pegged Oracle: [`0x16adB8209618e0cBD4C19f0487f8916b0cf5a0a8`](https://arbiscan.io/address/0x16adB8209618e0cBD4C19f0487f8916b0cf5a0a8)
* Chainlink Oracle: [`0xBBCC2dF27EF4f087a404a8dD849d21984a628433`](https://arbiscan.io/address/0xBBCC2dF27EF4f087a404a8dD849d21984a628433)
* ERC4626 Non LP Spot Oracle: [`0xDD03945351F10728ba4322f5877E3a700fF9a8F2`](https://arbiscan.io/address/0xDD03945351F10728ba4322f5877E3a700fF9a8F2)
* Curve V1 Oracle: [`0x47B835DCFfCbFcC17A0ab2E5FB94CEDB67B49b5F`](https://arbiscan.io/address/0x47B835DCFfCbFcC17A0ab2E5FB94CEDB67B49b5F)
* Custom Set Oracle: [`0x80C503743AAcE4F6048654AB833D411eafCDc4Ca`](https://arbiscan.io/address/0x80C503743AAcE4F6048654AB833D411eafCDc4Ca)
* Zero Oracle: [`0x42eccAbc940A81bF504B574b84F80a6dF5D23713`](https://arbiscan.io/address/0x42eccAbc940A81bF504B574b84F80a6dF5D23713)
* ERC4626 Vault Share Oracle: [`0xF701b4c8583Cb34ba55F22436091c9eA0D2b7087`](https://arbiscan.io/address/0xF701b4c8583Cb34ba55F22436091c9eA0D2b7087)
* Balancer V2 Composable: [`0xDdC9E47b60c89Bf39d14f3739E63763ebD7AB47C`](https://arbiscan.io/address/0xDdC9E47b60c89Bf39d14f3739E63763ebD7AB47C)
* Balancer V3 Stable: [`0x9909571399F38Fc9EEa4Eac30Cf19Ac4cE2E54d2`](https://arbiscan.io/address/0x9909571399F38Fc9EEa4Eac30Cf19Ac4cE2E54d2)
* RedStone Pull Oracle: [`0xed2ACB88442c415b8666FAD041962bf1085e081B`](https://arbiscan.io/address/0xed2ACB88442c415b8666FAD041962bf1085e081B)

### Liquidation and Async Swappers

* Liquidation Row: [`0x610Ffeb00B8312B0540DED300c683227CB3E3AB5`](https://arbiscan.io/address/0x610Ffeb00B8312B0540DED300c683227CB3E3AB5)
* ~~Liquidation Executor:~~ [~~`0x4008dD4A6f8df7427E560B56dF1B66E197ceBa03`~~](https://arbiscan.io/address/0x4008dD4A6f8df7427E560B56dF1B66E197ceBa03)
* Liquidation Executor: [`0x34D929D9e3287F51932a2095A48203bBb1F7AD94`](https://arbiscan.io/address/0x34D929D9e3287F51932a2095A48203bBb1F7AD94)

### Swap Router Swappers

* Balancer V2 Swapper: [`0x6dEF5e2bb8545e1CD9f4f52Ff42E2732Fc13f311`](https://arbiscan.io/address/0x6dEF5e2bb8545e1CD9f4f52Ff42E2732Fc13f311)
* Balancer V3 Batch Swap: [`0xbd6BeB16d6CCf62142588fb0cE26e589254c741b`](https://arbiscan.io/address/0xbd6BeB16d6CCf62142588fb0cE26e589254c741b)
* Uni V3 Swapper: [`0x0Ca3D0F3bf808b4720D8ad0e9C1e9fB13534BB42`](https://arbiscan.io/address/0x0Ca3D0F3bf808b4720D8ad0e9C1e9fB13534BB42)
* Curve V1 Swapper: [`0x1Bdc539dEDd630d9BC66FD88a53305B07db8cF69`](https://arbiscan.io/address/0x1Bdc539dEDd630d9BC66FD88a53305B07db8cF69)
* ERC 4626 Swapper: [`0x5C47F4Fa6978A7551488CAE568Df4ffbAB905667`](https://arbiscan.io/address/0x5C47F4Fa6978A7551488CAE568Df4ffbAB905667)

### Liquidation and Async Swappers

* Z~~eroEx Async Swapper:~~ [~~`0xAdB96b38C8b99e2b8d52Fe7B6060A1ed4a49f858`~~](https://arbiscan.io/address/0xAdB96b38C8b99e2b8d52Fe7B6060A1ed4a49f858)
* ~~ZeroEx Async Swapper (Transfer):~~ [~~`0xA2217dC019d2946E3c6DED1E829EDaF0B969b478`~~](https://arbiscan.io/address/0xA2217dC019d2946E3c6DED1E829EDaF0B969b478)
* OpenOcean Async Swapper: [`0x4660A170E2E36dAAab8Aa4DCdD0001433E34f58D`](https://arbiscan.io/address/0x4660A170E2E36dAAab8Aa4DCdD0001433E34f58D)
* OpenOcean Async Swapper (Transfer): [`0x9f42f514F4A1e7E0a86A186b804769fC6d4F4ED5`](https://arbiscan.io/address/0x9f42f514F4A1e7E0a86A186b804769fC6d4F4ED5)
* Bebop Async Swapper: [`0x621091dceaEA90571590ee6bf04aecbf8845Deba`](https://arbiscan.io/address/0x621091dceaEA90571590ee6bf04aecbf8845Deba)
* Bebop Async Swapper (Transfer): [`0xc54e002845c1dff4Ec13DB93200CD108c94717Ad`](https://arbiscan.io/address/0xc54e002845c1dff4Ec13DB93200CD108c94717Ad)
* LiFi Async Swapper: [`0x4423cB967ef8F3a21fB360D8528234271B450Ceb`](https://arbiscan.io/address/0x4423cB967ef8F3a21fB360D8528234271B450Ceb)
* LiFi Async Swapper (Transfer): [`0xCaf5B3E34C7D556C9D8Dc4873451324B7241BcaD`](https://arbiscan.io/address/0xCaf5B3E34C7D556C9D8Dc4873451324B7241BcaD)
* ERC4626 Swapper: [`0x98A216C534b7EAADa6D5642a9CA69393360E339a`](https://arbiscan.io/address/0x98A216C534b7EAADa6D5642a9CA69393360E339a)
* ERC4626 Swapper (Transfer): [`0xE1A08bf9ef02A869eABf2585CbcA50E898799213`](https://arbiscan.io/address/0xE1A08bf9ef02A869eABf2585CbcA50E898799213)
* ZeroEx V2 Swapper (Sell All): [`0x45bcE6054C4612Dca905a4D7801F60E6273949fB`](https://arbiscan.io/address/0x45bcE6054C4612Dca905a4D7801F60E6273949fB)
* ZeroEx V2 Swapper (Sell All w/Transfer): [`0x18f9F37631A866aeaC018e8399Df23da37c00DF8`](https://arbiscan.io/address/0x18f9F37631A866aeaC018e8399Df23da37c00DF8)
* Bank Swapper: [`0x1CDe65265061d84753086fe39084694F934647BE`](https://arbiscan.io/address/0x1CDe65265061d84753086fe39084694F934647BE)

### Misc

* OneToOneBaseAssetBackingOracle: [`0x4E8cE63CCE31F667D03955dd98133d504d8E9B32`](https://arbiscan.io/address/0x4E8cE63CCE31F667D03955dd98133d504d8E9B32)
* OneToOneUSDBackingOracle: [`0xa698A94C0dCE389B862f58B08f618a981Ea99402`](https://arbiscan.io/address/0xa698A94C0dCE389B862f58B08f618a981Ea99402)
* ERC4626BackingOracle: [`0x47CABFE7C68Dc09b1e26ac62655664295481Ed2F`](https://arbiscan.io/address/0x47CABFE7C68Dc09b1e26ac62655664295481Ed2F)
* Backing Root Oracle: [`0x3AaC1CE01127593CA0c7f87b1Aedb1E153e152aE`](https://arbiscan.io/address/0x3AaC1CE01127593CA0c7f87b1Aedb1E153e152aE)
* SolverRootOracle: [`0x5EE5D04942DC4C78cE27c249fDacB24Aa39cBD14`](https://arbiscan.io/address/0x5EE5D04942DC4C78cE27c249fDacB24Aa39cBD14)
* Sequencer Checker: [`0x537f6e12fBC2EBF630d6D8dB7BbF8612a0D97DcC`](https://arbiscan.io/address/0x537f6e12fBC2EBF630d6D8dB7BbF8612a0D97DcC)

### Service Accounts

* Custom Oracle: [`0xEA86809D02B5C298455A4a24A584dADd591d8047`](https://arbiscan.io/address/0xEA86809D02B5C298455A4a24A584dADd591d8047)
* Solver Execution (arbUSD): [`0x7C943D75d60b9F2a54C3358411D1c48e554d3523`](https://arbiscan.io/address/0x7C943D75d60b9F2a54C3358411D1c48e554d3523)
* Reward Liquidator: [`0xf7195324E2e98aeD647145F07EAcf764f1Ab3694`](https://arbiscan.io/address/0xf7195324E2e98aeD647145F07EAcf764f1Ab3694)
* Swap Route Watcher: [`0x18cdb39113e331c45151adac5bc48194590ef582`](https://arbiscan.io/address/0x18cdb39113e331c45151adac5bc48194590ef582)
* Debt Reporting: [`0x1A65E4844a3AF0F1733ee9e1A474dc7DB3c396a3`](https://arbiscan.io/address/0x1A65E4844a3AF0F1733ee9e1A474dc7DB3c396a3)
* Fluid Claim: [`0x5bBb3eAaA3E7E1d2c57a19A23c8BD8be0Dd7dC68`](https://arbiscan.io/address/0x5bBb3eAaA3E7E1d2c57a19A23c8BD8be0Dd7dC68)
* Morpho Claim: [`0xbD430fa1Ca43fD142bc6d44FC2b362d25CF95b02`](https://arbiscan.io/address/0xbD430fa1Ca43fD142bc6d44FC2b362d25CF95b02)

### Destination Vault Templates

* Curve Gauge Template: [`0xDd78eaf244DA68429ADA4F3a8767f3a9F307b0FD`](https://arbiscan.io/address/0xDd78eaf244DA68429ADA4F3a8767f3a9F307b0FD)
* Balancer V3 Aura Template: [`0xc77161AF2701f2fB880D4A7144ddc5f4e7d536C0`](https://arbiscan.io/address/0xc77161AF2701f2fB880D4A7144ddc5f4e7d536C0)
* Fluid Template: [`0x2B8c9765b5983bD3C94849705050DAAbde414127`](https://arbiscan.io/address/0x2B8c9765b5983bD3C94849705050DAAbde414127)
* Morpho Template: [`0x52B31f7d8397A7A3851ddB548ACaC64abfd48BE3`](https://arbiscan.io/address/0x52B31f7d8397A7A3851ddB548ACaC64abfd48BE3)
* Euler Template: [`0xC32572fCc9990977b79a6D744f60D78Ac6eA15a8`](https://arbiscan.io/address/0xC32572fCc9990977b79a6D744f60D78Ac6eA15a8)
* Aave V3 Template: [`0x00e52AE3cFc140FDf3DFf8932500D4aD919C5f4A`](https://arbiscan.io/address/0x00e52AE3cFc140FDf3DFf8932500D4aD919C5f4A)

### Destination Vaults

* Balancer V3 Aura GHO(Aave)/USDC(Aave)/USDT(Aave) Dest Vault: [`0xce1c8244410a4F97308Ffc5Ec926C9EF8FAeC809`](https://arbiscan.io/address/0xce1c8244410a4F97308Ffc5Ec926C9EF8FAeC809)
* Aave USDC Dest Vault: [`0xEBcfF8CaCb781125c35b3742Ef328d8639864991`](https://arbiscan.io/address/0xEBcfF8CaCb781125c35b3742Ef328d8639864991)
* Aave USDT Dest Vault: [`0xA087e1032DBef8f980C4512f3eB76748c4e7D7Bb`](https://arbiscan.io/address/0xA087e1032DBef8f980C4512f3eB76748c4e7D7Bb)
* Fluid USDC Dest Vault: [`0xdeDB0092EC78625a7b69a8D90063ab5b51d2fB40`](https://arbiscan.io/address/0xdeDB0092EC78625a7b69a8D90063ab5b51d2fB40)
* Fluid USDT Dest Vault: [`0xd70F872E4Fd8A55076082Ff73ED7F54524D6c74b`](https://arbiscan.io/address/0xd70F872E4Fd8A55076082Ff73ED7F54524D6c74b)
* Fluid GHO Dest Vault: [`0x40454F1E95Ee73d78F3876C892e9A32007aa2F74`](https://arbiscan.io/address/0x40454F1E95Ee73d78F3876C892e9A32007aa2F74)
* Gauntlet USDC (Core) Dest Vault: [`0xD7B1F55E0CcfFa849b35aA1c39B94eb415DB00cE`](https://arbiscan.io/address/0xD7B1F55E0CcfFa849b35aA1c39B94eb415DB00cE)
* Gauntlet USDC (Prime) Dest Vault: [`0xFf004bA7Df7F0D4fD0D1856f009184bd77A24192`](https://arbiscan.io/address/0xFf004bA7Df7F0D4fD0D1856f009184bd77A24192)
* Gauntlet MEV Capital USDC Dest Vault: [`0x65f4fe4026e5a9d47118f9CFCE32c75DE3a62EEF`](https://arbiscan.io/address/0x65f4fe4026e5a9d47118f9CFCE32c75DE3a62EEF)
* USDC (Euler Arbitrum) Dest Vault: [`0xe6A2b1ADe3f61Fe4D957Bb0c792eA85Ece08Fc71`](https://arbiscan.io/address/0xe6A2b1ADe3f61Fe4D957Bb0c792eA85Ece08Fc71)
* USDC (Euler Arbitrum Yield) Dest Vault: [`0x39841737112ec884406B66a487f3EfCdBFD80085`](https://arbiscan.io/address/0x39841737112ec884406B66a487f3EfCdBFD80085)
* Steakhouse High Yield USDC Dest Vault: [`0xab3DA8995D5FeA17913c3D12A5B199F1cCC9Bf0b`](https://arbiscan.io/address/0xab3DA8995D5FeA17913c3D12A5B199F1cCC9Bf0b)
* Curve Curve crvUSD/USDC Dest Vault: [`0x04f7CEe4169276e9245d09b2cf074b193F94f051`](https://arbiscan.io/address/0x04f7CEe4169276e9245d09b2cf074b193F94f051)
* Curve Curve crvUSD/USDT Dest Vault: [`0x9b19857171aAD69896f8Cd6912c91608435c4410`](https://arbiscan.io/address/0x9b19857171aAD69896f8Cd6912c91608435c4410)

### Solver + Execution

#### Solvers

* FlashBorrowerSolver (arbUSD): [`0x371B3CC4cAD4bFFc25729C9Db4d8c97ECab29488`](https://arbiscan.io/address/0x371B3CC4cAD4bFFc25729C9Db4d8c97ECab29488)

#### Execution Helpers

* BalancerV3Adapter: [`0x19FA89CDaDFe49ac70531C9ad714A27Bc2c1a620`](https://arbiscan.io/address/0x19FA89CDaDFe49ac70531C9ad714A27Bc2c1a620)
* ArraysConverter address: [`0xB6Ab7aE9EB120A8C3d2B7649082e55907aE5940F`](https://arbiscan.io/address/0xB6Ab7aE9EB120A8C3d2B7649082e55907aE5940F)
* BlockchainInfo address: [`0x86aBaA236F76c1406404C9E78B142c72CA3308B3`](https://arbiscan.io/address/0x86aBaA236F76c1406404C9E78B142c72CA3308B3)
* Bytes32 address: [`0x5f317e865c7B69ec1a079c04c46Be063408f520E`](https://arbiscan.io/address/0x5f317e865c7B69ec1a079c04c46Be063408f520E)
* Integer address: [`0x4c0868931B0C6E72aa835D657fa56179cE092028`](https://arbiscan.io/address/0x4c0868931B0C6E72aa835D657fa56179cE092028)
* SwapperAdapter address: [`0xac2e82Aa6270C6c8aF9398b3522D574441CAD295`](https://arbiscan.io/address/0xac2e82Aa6270C6c8aF9398b3522D574441CAD295)
* CurveAdapter address: [`0xCB9597BB803d7BAA4B6A14c2aFD6d4Dc9230AF70`](https://arbiscan.io/address/0xCB9597BB803d7BAA4B6A14c2aFD6d4Dc9230AF70)
* BalancerAdapter address: [`0xb0C974D40B0fFd26F50bBb6b04B72a9A6757702f`](https://arbiscan.io/address/0xb0C974D40B0fFd26F50bBb6b04B72a9A6757702f)
  {% endtab %}

{% tab title="Plasma" %}

### Core Contracts

* System Registry: [`0x9065C0E33Bc8FB31A21874f399985e39bC187D48`](https://plasmascan.to/address/0x9065C0E33Bc8FB31A21874f399985e39bC187D48)
* Access Controller: [`0x45938694D6c66CDF67bAa5ab0E312cE2bE067cCD`](https://plasmascan.to/address/0x45938694D6c66CDF67bAa5ab0E312cE2bE067cCD)
* System Security: [`0xF8CDA9D896E06DB0a682838ca8Ac5fFF1e699834`](https://plasmascan.to/address/0xF8CDA9D896E06DB0a682838ca8Ac5fFF1e699834)
* Autopool Registry: [`0x0dA0E8f8dF8b6541affB071C6e0FF6835154e1dc`](https://plasmascan.to/address/0x0dA0E8f8dF8b6541affB071C6e0FF6835154e1dc)
* Destination Template Registry: [`0x7de076006De8842b55fa13E1bf8b177bDCFfc1F4`](https://plasmascan.to/address/0x7de076006De8842b55fa13E1bf8b177bDCFfc1F4)
* Destination Vault Registry: [`0x8Ccd47869E0EeA55Ba4AF520571A9C6Ce300347d`](https://plasmascan.to/address/0x8Ccd47869E0EeA55Ba4AF520571A9C6Ce300347d)
* Destination Vault Factory: [`0xc895bBD0fCB39BdcB66151Fa6316B5b13f5c288a`](https://plasmascan.to/address/0xc895bBD0fCB39BdcB66151Fa6316B5b13f5c288a)
* Swap Router: [`0xB4DA8D0Deb675dD6619CE64d265Dfec369FbCbE6`](https://plasmascan.to/address/0xB4DA8D0Deb675dD6619CE64d265Dfec369FbCbE6)
* Async Swapper Registry: [`0x7bc60435AaADDf3d82fB45704D11066530560397`](https://plasmascan.to/address/0x7bc60435AaADDf3d82fB45704D11066530560397)
* Root Price Oracle: [`0xf25BDd81822aB430F6637Ea31D8b5aDd0B6d124F`](https://plasmascan.to/address/0xf25BDd81822aB430F6637Ea31D8b5aDd0B6d124F)
* Curve Resolver: [`0x4dd0328AC9E4537FaB086Ed8B52C9DD50A77e097`](https://plasmascan.to/address/0x4dd0328AC9E4537FaB086Ed8B52C9DD50A77e097)
* Lens: [`0x8dBaD46D468d57fdd1FCbA0452C8cD4d7FaE72E8`](https://plasmascan.to/address/0x8dBaD46D468d57fdd1FCbA0452C8cD4d7FaE72E8)
* Autopilot Router: [`0xC848832A31EB5558F14f13d361bb3A95EC91f27a`](https://plasmascan.to/address/0xC848832A31EB5558F14f13d361bb3A95EC91f27a)

### Autopools

* plasmaUSD: [`0x4Ec8f8b0F144ce1fa280B84F01Df9e353e83EC80`](https://plasmascan.to/address/0x4Ec8f8b0F144ce1fa280B84F01Df9e353e83EC80)
  * Extra Rewarder: [`0xaE6b250841fA7520AF843c776aA58E23060E2124`](https://plasmascan.to/address/0xaE6b250841fA7520AF843c776aA58E23060E2124)

#### Hooks

* Lst Price Hook: [`0xC91f3B941df65F58371c9C04221629c2B6a4Ebc5`](https://plasmascan.to/address/0xC91f3B941df65F58371c9C04221629c2B6a4Ebc5)
* Max Value Slippage Hook: [`0x881Bb334aa682eF61F6aD03AC8cd220E5B3D63d4`](https://plasmascan.to/address/0x881Bb334aa682eF61F6aD03AC8cd220E5B3D63d4)
* Min Time Gap Hook: [`0x71689A8E924ba6611FAC7Bd40c55796E8b1679D9`](https://plasmascan.to/address/0x71689A8E924ba6611FAC7Bd40c55796E8b1679D9)
* Nav Lookback Hook: [`0x4c0bE1062dCdAEd7be09f73A4f00a0313a6b427b`](https://plasmascan.to/address/0x4c0bE1062dCdAEd7be09f73A4f00a0313a6b427b)
* Slippage Budget Hook: [`0xf68f04384054e47F3FA08C48FB58F20De080B335`](https://plasmascan.to/address/0xf68f04384054e47F3FA08C48FB58F20De080B335)

#### Pool Factories

* USDT0 Autopool Template: [`0xD0CF0C4594ED8D2a0d845D493693fDE822cC5821`](https://plasmascan.to/address/0xD0CF0C4594ED8D2a0d845D493693fDE822cC5821)
* USDT0 Autopool Factory: [`0x7BEA14E8B5b8693D74a451bAbEcbcD34c6Ebe83D`](https://plasmascan.to/address/0x7BEA14E8B5b8693D74a451bAbEcbcD34c6Ebe83D)
* USDT0 Autopool Factory Admin: [`0xea6b816ABD45D1361fda29B56B89864180bcc98A`](https://plasmascan.to/address/0xea6b816ABD45D1361fda29B56B89864180bcc98A)

### Owners

* DAO Owner Multisig - [`0x1Bb9231F96A5420858d273c3e311f0AffC23cdc0`](https://app.safe.global/settings/setup?safe=arb1:0x1Bb9231F96A5420858d273c3e311f0AffC23cdc0)
* AP Dev Owner Multisig - [`0xa9900B2d550c406d1Cf58DA27228Feeef21D447b`](https://app.safe.global/transactions/queue?safe=arb1:0xa9900B2d550c406d1Cf58DA27228Feeef21D447b)
* Pausing Ops Multisig - [`0x127563761083d2Ac7794c17d04E17393D8Ad9013`](https://app.safe.global/transactions/queue?safe=arb1:0x127563761083d2Ac7794c17d04E17393D8Ad9013)

### Liquidation

* Liquidation Row: [`0xD3132ce50e7471cC6130Ac5Aa553149dc3B2A018`](https://plasmascan.to/address/0xD3132ce50e7471cC6130Ac5Aa553149dc3B2A018)
* Liquidation Executor: [`0x2DDB79fDEb9F4708604acEcec28E4Adc247980Be`](https://plasmascan.to/address/0x2DDB79fDEb9F4708604acEcec28E4Adc247980Be)
* ZeroEx V2 Swapper (Sell All): [`0x835beEd42d856Eaf76477982b9a8875d8c52F40E`](https://plasmascan.to/address/0x835beEd42d856Eaf76477982b9a8875d8c52F40E)
* ZeroEx V2 Swapper (Sell All w/Transfer): [`0x09C6Ac2b2355152599C71CE13DC067618b3e527F`](https://plasmascan.to/address/0x09C6Ac2b2355152599C71CE13DC067618b3e527F)
* LiFi Async Swapper: [`0x2Fc77F22e40E2459D4794Bd108c779C9dd6cD469`](https://plasmascan.to/address/0x2Fc77F22e40E2459D4794Bd108c779C9dd6cD469)
* LiFi Async Swapper (Transfer): [`0x23EEd26420e4902d1d86c35C02508C5e618C0731`](https://plasmascan.to/address/0x23EEd26420e4902d1d86c35C02508C5e618C0731)
* ERC4626 Swapper: [`0xed5DC10000c06CeAA7f0A5a3ea3CE06ad6272D93`](https://plasmascan.to/address/0xed5DC10000c06CeAA7f0A5a3ea3CE06ad6272D93)
* ERC4626 Swapper (Transfer): [`0x9186eA24B87deeE4e93a6260D3BE31819d82617D`](https://plasmascan.to/address/0x9186eA24B87deeE4e93a6260D3BE31819d82617D)
* Bank Swapper: [`0xcE618f99Fb9323888f942Bb99bD9611481AfbC90`](https://plasmascan.to/address/0xcE618f99Fb9323888f942Bb99bD9611481AfbC90)

### Swap Router Swappers

* Balancer V3 Single Swap: [`0xf59ADc3592653B91caE14a834Ede8A0387919D3f`](https://plasmascan.to/address/0xf59ADc3592653B91caE14a834Ede8A0387919D3f)
* Balancer V3 Batch Swap: [`0x6De328EA43d143e3993E8Dbc8dd2499aB6729033`](https://plasmascan.to/address/0x6De328EA43d143e3993E8Dbc8dd2499aB6729033)
* Uni V3 Swapper: [`0x90535fE3113a3F6E07EA0F523A64feEb0655dcd1`](https://plasmascan.to/address/0x90535fE3113a3F6E07EA0F523A64feEb0655dcd1)
* Curve V1 Swapper: [`0xC927975fFaEbf41F53E16B107A905B4eEB82a635`](https://plasmascan.to/address/0xC927975fFaEbf41F53E16B107A905B4eEB82a635)
* ERC 4626 Swapper: [`0xba08E193A1917FCD5fed59fBF4A432789873E32f`](https://plasmascan.to/address/0xba08E193A1917FCD5fed59fBF4A432789873E32f)

### Solvers

* FlashBorrowerSolver (plasmaUSD): [`0x673F9B14f2608B9aFc7B7d402d50Bb9d29759FBb`](https://plasmascan.to/address/0x673F9B14f2608B9aFc7B7d402d50Bb9d29759FBb)

#### Solver Utils

* ArraysConverter address: [`0x09708019cf2527AD3263885FF712fc79ceC5D0C2`](https://plasmascan.to/address/0x09708019cf2527AD3263885FF712fc79ceC5D0C2)
* BlockchainInfo address: [`0x88cCC293B3708B781a3fc843B2133B037a48d171`](https://plasmascan.to/address/0x88cCC293B3708B781a3fc843B2133B037a48d171)
* Bytes32 address: [`0x12d5aaD28da62A2d7eC2255aF6202a458b48B970`](https://plasmascan.to/address/0x12d5aaD28da62A2d7eC2255aF6202a458b48B970)
* Integer address: [`0x5206Eb7d388E4B0a35F5718BE379068C18e4ec6e`](https://plasmascan.to/address/0x5206Eb7d388E4B0a35F5718BE379068C18e4ec6e)
* SwapperAdapter address: [`0x22BaBD3E0dB07B69Bb265E58c52D6a131234C56f`](https://plasmascan.to/address/0x22BaBD3E0dB07B69Bb265E58c52D6a131234C56f)
* CurveAdapter address: [`0xF70c47a05C445E39A69b6c43f3A6e9c1A8e86E3a`](https://plasmascan.to/address/0xF70c47a05C445E39A69b6c43f3A6e9c1A8e86E3a)
* BalancerAdapter address: [`0x35CbE9f5CAd6ED153fD269eBa82FC6257E331866`](https://plasmascan.to/address/0x35CbE9f5CAd6ED153fD269eBa82FC6257E331866)
* BalancerV3Adapter address: [`0x0d8ea407fC5569AeF5141e68807717a50347668C`](https://plasmascan.to/address/0x0d8ea407fC5569AeF5141e68807717a50347668C)

### Service Accounts

* Custom Oracle: [`0xEA86809D02B5C298455A4a24A584dADd591d8047`](https://plasmascan.to/address/0xEA86809D02B5C298455A4a24A584dADd591d8047)
* Solver (plasmaUSD): [`0xc515973f040F6E709ED96Cf3a0099788B316010C`](https://plasmascan.to/address/0xc515973f040F6E709ED96Cf3a0099788B316010C)
* Reward Liquidator: [`0xf7195324E2e98aeD647145F07EAcf764f1Ab3694`](https://plasmascan.to/address/0xf7195324E2e98aeD647145F07EAcf764f1Ab3694)
* Swap Route Watcher: [`0x18cdb39113e331c45151adac5bc48194590ef582`](https://plasmascan.to/address/0x18cdb39113e331c45151adac5bc48194590ef582)
* Debt Reporting: [`0x1A65E4844a3AF0F1733ee9e1A474dc7DB3c396a3`](https://plasmascan.to/address/0x1A65E4844a3AF0F1733ee9e1A474dc7DB3c396a3)

### Oracles

* WXPL Pegged Oracle: [`0x73806677Ae5B06d7A04451350BDc5a48b88b759F`](https://plasmascan.to/address/0x73806677Ae5B06d7A04451350BDc5a48b88b759F)
* Custom Set Oracle: [`0x9783C04AE41E904a0b601A0732D2CFfb71d55B72`](https://plasmascan.to/address/0x9783C04AE41E904a0b601A0732D2CFfb71d55B72)
* RedStone Pull Oracle: [`0xAc93Ee7A60649D5B4DaA318916FB6D7eA6BE4113`](https://plasmascan.to/address/0xAc93Ee7A60649D5B4DaA318916FB6D7eA6BE4113)
* Chainlink Oracle: [`0x0d0314555d0c6bF2194d7EFEe62476724539c689`](https://plasmascan.to/address/0x0d0314555d0c6bF2194d7EFEe62476724539c689)
* ERC4626 Non LP Spot Oracle: [`0x8A99Bb16cdb5D38F2ccb57e70fD3755E3FF682Ad`](https://plasmascan.to/address/0x8A99Bb16cdb5D38F2ccb57e70fD3755E3FF682Ad)
* Curve V1 Oracle: [`0xb757C8b070676171e70E43b5797083D46A431d24`](https://plasmascan.to/address/0xb757C8b070676171e70E43b5797083D46A431d24)
* Zero Oracle: [`0x6b7610d5f0fe4fda13c2fc85d523f122e93d5d48`](https://plasmascan.to/address/0x6b7610d5f0fe4fda13c2fc85d523f122e93d5d48)
* ERC4626 Vault Share Oracle: [`0x8b504E5Cf4708c334384F36674c79978F85dF923`](https://plasmascan.to/address/0x8b504E5Cf4708c334384F36674c79978F85dF923)
* Balancer V3 Stable Math Oracle: [`0xFf9059A9B7eafD27d12C5f164144CA8ECC6cA748`](https://plasmascan.to/address/0xFf9059A9B7eafD27d12C5f164144CA8ECC6cA748)
* Redstone Oracle: [`0x80d8315de571BFA4Ff0B884A03f95837f8bB308d`](https://plasmascan.to/address/0x80d8315de571BFA4Ff0B884A03f95837f8bB308d)

### Utils

* OneToOneBaseAssetBackingOracle: [`0x951891cd7c089BF2CFDe68342cbc94a5260fbb80`](https://plasmascan.to/address/0x951891cd7c089BF2CFDe68342cbc94a5260fbb80)
* OneToOneUSDBackingOracle: [`0xEA292b5132aBa11AF6226DACBad556A0b26B9818`](https://plasmascan.to/address/0xEA292b5132aBa11AF6226DACBad556A0b26B9818)
* ERC4626BackingOracle: [`0x5ab9F9CD8CcA2E8B694dE0E59fa18429A05031a9`](https://plasmascan.to/address/0x5ab9F9CD8CcA2E8B694dE0E59fa18429A05031a9)
* Backing Root Oracle: [`0x0FDA0487d92b7a187D4795E2eCaeCA6bbAAf0532`](https://plasmascan.to/address/0x0FDA0487d92b7a187D4795E2eCaeCA6bbAAf0532)
* Solver Root Oracle: [`0x03fAD8445b30bF639c5f54e9502e43BA5f4D6caD`](https://plasmascan.to/address/0x03fAD8445b30bF639c5f54e9502e43BA5f4D6caD)

### Destination Templates

* Curve Template: [`0xA265CEc7a8Ec92B9b4124023324534Faa9ED3E9f`](https://plasmascan.to/address/0xA265CEc7a8Ec92B9b4124023324534Faa9ED3E9f)
* Curve Gauge Template: [`0x162F49e66a8e9eAB169a9F09Eb27120311B4b30f`](https://plasmascan.to/address/0x162F49e66a8e9eAB169a9F09Eb27120311B4b30f)
* Balancer V3 Template: [`0xB42C35deBA9491Ad971dD8f8B04BdE449F0Aae84`](https://plasmascan.to/address/0xB42C35deBA9491Ad971dD8f8B04BdE449F0Aae84)
* Fluid Template: [`0xf07c1dB1d9c0a191Cc91115bbB47566E1549a1D1`](https://plasmascan.to/address/0xf07c1dB1d9c0a191Cc91115bbB47566E1549a1D1)
* Morpho Template: [`0xDE852a993A9468dB1F223160A657ec881EF90Db4`](https://plasmascan.to/address/0xDE852a993A9468dB1F223160A657ec881EF90Db4)
* Aave V3 Template: [`0xFC962A39C763f183E02458f6cf9343C0682e5069`](https://plasmascan.to/address/0xFC962A39C763f183E02458f6cf9343C0682e5069)
* Euler Template: [`0x15b4dc0Cf0E917E138ACB777C7d9EDA5a57178f9`](https://plasmascan.to/address/0x15b4dc0Cf0E917E138ACB777C7d9EDA5a57178f9)
* Balancer V3 Merkl Template: [`0x28c3B82d6d540fa57c9468a231b458cD6D354ad3`](https://plasmascan.to/address/0x28c3B82d6d540fa57c9468a231b458cD6D354ad3)

### Destinations

* Aave sUSDe Dest Vault: [`0x5DFFAE9a249db6fc61906BaE2c1e640045602ee7`](https://plasmascan.to/address/0x5DFFAE9a249db6fc61906BaE2c1e640045602ee7)
* Aave USDe Dest Vault: [`0x714FFc3C8418739F052c87ed7DeA45d68f8aB8E9`](https://plasmascan.to/address/0x714FFc3C8418739F052c87ed7DeA45d68f8aB8E9)
* Aave USDT0 Dest Vault: [`0xdE4D6c5416ff7584373020fa24F160d193F84855`](https://plasmascan.to/address/0xdE4D6c5416ff7584373020fa24F160d193F84855)
* Curve Curve USDT0/USDe Dest Vault: [`0xfc23378dbfd70a0d6Fd6a55b2095eF0Ffa8E5106`](https://plasmascan.to/address/0xfc23378dbfd70a0d6Fd6a55b2095eF0Ffa8E5106)
* Curve Curve USDT0/sUSDe Dest Vault: [`0x58f411571FAE6cbB348572ff374f0589133773A3`](https://plasmascan.to/address/0x58f411571FAE6cbB348572ff374f0589133773A3)
* Curve Curve USDT0/USDai Dest Vault: [`0x3540F2634c2b4e1F99822E14D09befe346654834`](https://plasmascan.to/address/0x3540F2634c2b4e1F99822E14D09befe346654834)
* Curve Curve USDT0/USDO Dest Vault: [`0xE3063E9dcD92DA315804118D6Bae6364Ff8246a5`](https://plasmascan.to/address/0xE3063E9dcD92DA315804118D6Bae6364Ff8246a5)
* Balancer V3 sUSDe/USDT0(Aave): [`0xC253ef426519c700914DA4b2325dD0F4B7E8ffDc`](https://plasmascan.to/address/0xC253ef426519c700914DA4b2325dD0F4B7E8ffDc)
* Balancer V3 USDe(Aave)/USDT0(Aave): [`0x28ed6640144Ce3aB7d30f5737cE376418D26badB`](https://plasmascan.to/address/0x28ed6640144Ce3aB7d30f5737cE376418D26badB)
* Balancer V3 USDai/USDT0(Aave): [`0xD94eC259EaeC7d73585215D1F098f3e82C2649F9`](https://plasmascan.to/address/0xD94eC259EaeC7d73585215D1F098f3e82C2649F9)
* Fluid USDT0 Dest Vault: [`0x5DD8e6C497d350aE7A32d6e2DFc07F42B27F905B`](https://plasmascan.to/address/0x5DD8e6C497d350aE7A32d6e2DFc07F42B27F905B)
* Fluid USDe Dest Vault: [`0x5B2cD1b8fD200Bd80A6facF9b3F60102caFfD68C`](https://plasmascan.to/address/0x5B2cD1b8fD200Bd80A6facF9b3F60102caFfD68C)
* Frontier Ethena USDT0 Dest Vault: [`0x868C33a2515cE3011796107d63cA825be804b672`](https://plasmascan.to/address/0x868C33a2515cE3011796107d63cA825be804b672)
* Frontier [USD.ai](http://usd.ai/) USDT0 Dest Vault: [`0x9199786e066256b3F2ec424dAe7d5d0b4bCf0377`](https://plasmascan.to/address/0x9199786e066256b3F2ec424dAe7d5d0b4bCf0377)
* TelosC Stream USDT0 Dest Vault: [`0x07Ed7ef81d7dD79fB6043D0a37c11d78f3B8F95b`](https://plasmascan.to/address/0x07Ed7ef81d7dD79fB6043D0a37c11d78f3B8F95b)
* Frontier Resolv RLP USDT0 Dest Vault: [`0xF5A4fA89F88a9Dc6B7fBF22d71D748Da810F684C`](https://plasmascan.to/address/0xF5A4fA89F88a9Dc6B7fBF22d71D748Da810F684C)
* Frontier Resolv wstUSR USDT0 Dest Vault: [`0xF3dE68350bf01d90FE9eD09A20B20E984E78d217`](https://plasmascan.to/address/0xF3dE68350bf01d90FE9eD09A20B20E984E78d217)
  {% endtab %}

{% tab title="Linea" %}

### **Core System Contracts**

* System Registry: [0x25f26Ec2e764c63F8D191dFE7f88c6646ca9F980](https://lineascan.build/address/0x25f26Ec2e764c63F8D191dFE7f88c6646ca9F980)
* Access Controller: [0xf4425CB2BB4275aFE3d0232a6a00a4FBFdb76a04](https://lineascan.build/address/0xf4425CB2BB4275aFE3d0232a6a00a4FBFdb76a04)
* System Security: [0x795abE7190eB06DDE22C5Ff1c99FA96F1987F494](https://lineascan.build/address/0x795abE7190eB06DDE22C5Ff1c99FA96F1987F494)
* Autopool Registry: [0xf25f616CCc086ddA1129323381EfA1edC8d5F42c](https://lineascan.build/address/0xf25f616CCc086ddA1129323381EfA1edC8d5F42c)
* Destination Template Registry: [0x66B9ebA2ceF184dFAf3B9E11B104be0a1c6e258C](https://lineascan.build/address/0x66B9ebA2ceF184dFAf3B9E11B104be0a1c6e258C)
* Destination Vault Registry: [0xc7B0617573A65cDAC06FAfD106Cf9f8503D65Da2](https://lineascan.build/address/0xc7B0617573A65cDAC06FAfD106Cf9f8503D65Da2)
* Destination Vault Factory: [0x618273975BE7c43601E500Dbc59a28cC2367520F](https://lineascan.build/address/0x618273975BE7c43601E500Dbc59a28cC2367520F)
* Swap Router: [0xf0e746d59032C573B91D39666eb32137917956D1](https://lineascan.build/address/0xf0e746d59032C573B91D39666eb32137917956D1)
* Async Swapper Registry: [0x46e9C8207A5Bd45D05dC4Cb6Cff791C01c7468Ca](https://lineascan.build/address/0x46e9C8207A5Bd45D05dC4Cb6Cff791C01c7468Ca)
* Curve Resolver: [0xBb1dFBBf3cFA0AE92119db2D35a53B59Fa852E5e](https://lineascan.build/address/0xBb1dFBBf3cFA0AE92119db2D35a53B59Fa852E5e)
* Lens: [0x92537a95b45AB695ab3EbabFc1A3c3E27AF7973c](https://lineascan.build/address/0x92537a95b45AB695ab3EbabFc1A3c3E27AF7973c)
* Autopilot Router: [0xF61E75fBe9147F230400a1e7737c6f6934990544](https://lineascan.build/address/0xF61E75fBe9147F230400a1e7737c6f6934990544)

### **Oracles**

* Eth Pegged Oracle: [0xa6E5AcE475B117C66Ffe5a0BAf5e09867dACf562](https://lineascan.build/address/0xa6E5AcE475B117C66Ffe5a0BAf5e09867dACf562)
* Chainlink Oracle: [0x969954e636e108315D289DA3A8408Cd7d5189950](https://lineascan.build/address/0x969954e636e108315D289DA3A8408Cd7d5189950)
* ERC4626 Non LP Spot Oracle: [0x46C004324A5Edeb9fC00Dac6eB7DEE4Db864686b](https://lineascan.build/address/0x46C004324A5Edeb9fC00Dac6eB7DEE4Db864686b)
* Curve V1 Oracle: [0xbB1Feb0e61329a0017E2029447ba7070728d2635](https://lineascan.build/address/0xbB1Feb0e61329a0017E2029447ba7070728d2635)
* Custom Set Oracle: [0x9FAefA5185917ad10B7759D2Ce8211A49ecC23E2](https://lineascan.build/address/0x9FAefA5185917ad10B7759D2Ce8211A49ecC23E2)
* Zero Oracle: [0xD7C964fe7DaE257A777b97223ED3fB263Bb24841](https://lineascan.build/address/0xD7C964fe7DaE257A777b97223ED3fB263Bb24841)
* ERC4626 Vault Share Oracle: [0xDB28f4219582Febd52aCDDC75b37EFCcB4aeaE68](https://lineascan.build/address/0xDB28f4219582Febd52aCDDC75b37EFCcB4aeaE68)

### Swap Router Swappers

* Uni V3 Swapper: [0xaE315B4397e2E8FE932a933E4E3C2b97CA66BCC9](https://lineascan.build/address/0xaE315B4397e2E8FE932a933E4E3C2b97CA66BCC9)
* ZeroEx Swapper: [0x69c6fBBa613dcF20CFA42aEC902572D3FCc0440E](https://lineascan.build/address/0x69c6fBBa613dcF20CFA42aEC902572D3FCc0440E)
* ERC 4626 Swapper: [0x6978F25d2E7FEEc1A515524fEc4ED721C4B3F5c3](https://lineascan.build/address/0x6978F25d2E7FEEc1A515524fEc4ED721C4B3F5c3)
* Etherex legacy (ShadowDexSwap): [0xFb918e1D100707e732129407065C9B8DBBEaE19d](https://lineascan.build/address/0xFb918e1D100707e732129407065C9B8DBBEaE19d#code)
  * Router: [0x32dB39c56C171b4c96e974dDeDe8E42498929c54](https://lineascan.build/address/0x32dB39c56C171b4c96e974dDeDe8E42498929c54#code)
* Etherex V3 (UniV3Swap): [0x0093fff32Ee2d0469Cb00baDB9f8D47efbB144c6](https://lineascan.build/address/0x0093fff32Ee2d0469Cb00baDB9f8D47efbB144c6#code)

### Service Accounts

* **Custom Oracle:** [0xEA86809D02B5C298455A4a24A584dADd591d8047](https://lineascan.build/address/0xEA86809D02B5C298455A4a24A584dADd591d8047)
* **Reward Liquidator:** [0xf7195324E2e98aeD647145F07EAcf764f1Ab3694](https://lineascan.build/address/0xf7195324E2e98aeD647145F07EAcf764f1Ab3694)
* **Swap Route Watcher:** [0x18cdb39113e331c45151adac5bc48194590ef582](https://lineascan.build/address/0x18cdb39113e331c45151adac5bc48194590ef582)
* **Debt Reporting:** [0x1A65E4844a3AF0F1733ee9e1A474dc7DB3c396a3](https://lineascan.build/address/0x1A65E4844a3AF0F1733ee9e1A474dc7DB3c396a3)
* Solver Exec (lineaUSD): [0xe6E71Fd8a737317Baaa14200bb4E39dCF303B12B](https://lineascan.build/address/0xe6E71Fd8a737317Baaa14200bb4E39dCF303B12B)

### **Liquidation**

* Liquidation Row: [0xc332386610bD4d555c762d7f88c17ACf96f05b3C](https://lineascan.build/address/0xc332386610bD4d555c762d7f88c17ACf96f05b3C)
* Liquidation Executor: [0x9f8E50CC9cF2627f9d0d11841C5f842663db4Bfa](https://lineascan.build/address/0x9f8E50CC9cF2627f9d0d11841C5f842663db4Bfa)

### Async Swappers

* 0x Protocol V2 Swapper: [0xd00c62B168652dd23060c1F337e31fCDf51424BB](https://lineascan.build/address/0xd00c62B168652dd23060c1F337e31fCDf51424BB)
* 0x Protocol V2 Swapper (Transfer): [0x42207161E6a9E366255274aC895EFbf87673Cd1A](https://lineascan.build/address/0x42207161E6a9E366255274aC895EFbf87673Cd1A)
* LiFi Async Swapper: [0x25BE909FC91F219a08e06B3b60664D98ea498fd1](https://lineascan.build/address/0x25BE909FC91F219a08e06B3b60664D98ea498fd1)
* LiFi Async Swapper (Transfer): [0x2844a087f60EFE110ffa06e28d9b3C1a586a26d8](https://lineascan.build/address/0x2844a087f60EFE110ffa06e28d9b3C1a586a26d8)
* ERC4626 Swapper: [0x268cBbc41D74618505982e83885bAaAe02161a03](https://lineascan.build/address/0x268cBbc41D74618505982e83885bAaAe02161a03)
* ERC4626 Swapper (Transfer): [0x3f962ecD4Edb29422Aa07e456ec2Bc7067ACc328](https://lineascan.build/address/0x3f962ecD4Edb29422Aa07e456ec2Bc7067ACc328)

### **Autopools**

* lineaUSD: [0xd1A6524Fccd465ECa7AF2340B3D7fd2e3bbD792a](https://lineascan.build/address/0xd1A6524Fccd465ECa7AF2340B3D7fd2e3bbD792a)
  * Rewarder: [0x03825c8C817FF49a208c9c20365C002418C5bF0D](https://lineascan.build/address/0x03825c8C817FF49a208c9c20365C002418C5bF0D)

#### **Hooks**

* Lst Price Hook: [0xF63DAFfB0B8Eb975856D7935d13E4645e66F2f47](https://lineascan.build/address/0xF63DAFfB0B8Eb975856D7935d13E4645e66F2f47)
* Max Value Slippage Hook: [0xAaEE6A22F738db8D50a492e42eDEF9bb52869707](https://lineascan.build/address/0xAaEE6A22F738db8D50a492e42eDEF9bb52869707)
* Min Time Gap Hook: [0xB617Bcc10ea25669DD99071bE6a962D4B9532E67](https://lineascan.build/address/0xB617Bcc10ea25669DD99071bE6a962D4B9532E67)
* Nav Lookback Hook: [0xa31FE55D43E0577155D71bf2231818a6Bd59FA42](https://lineascan.build/address/0xa31FE55D43E0577155D71bf2231818a6Bd59FA42)
* Slippage Budget Hook: [0x798b8a1dd081ac4cec410E40F8Dd0616B4824645](https://lineascan.build/address/0x798b8a1dd081ac4cec410E40F8Dd0616B4824645)

#### Pool Factories

* USDC Template: [0xc9Db15BF0361a5AE0Aca0E3Bc8D0ec7faB195e7B](https://lineascan.build/address/0xc9Db15BF0361a5AE0Aca0E3Bc8D0ec7faB195e7B)
* USDC Factory: [0x01890EA9326d6C2d5941A51473d12F8179744BE4](https://lineascan.build/address/0x01890EA9326d6C2d5941A51473d12F8179744BE4)

### **Destination Vault Templates**

* Aave V3 Template: [0xbD353da0ddBE5aED419f941ec95b746BCb45e7e2](https://lineascan.build/address/0xbD353da0ddBE5aED419f941ec95b746BCb45e7e2)
* Euler Template: [0xbe22c1F54Cd2B1BD59bB20C7c2A97E688b3ae95f](https://lineascan.build/address/0xbe22c1F54Cd2B1BD59bB20C7c2A97E688b3ae95f)

### **Destination Vaults**

* Euler Re7 USDC Dest Vault: [0x9d2868bAfEaA293dAa7B5d1e6d1DD6B1a2239e3A](https://lineascan.build/address/0x9d2868bAfEaA293dAa7B5d1e6d1DD6B1a2239e3A)
* Euler Re7 USDT Dest Vault: [0xD2F243A4E0311950c11122851179eDb04c5D4471](https://lineascan.build/address/0xD2F243A4E0311950c11122851179eDb04c5D4471)
* Aave USD Dest Vault: [0xD96d54E54186116fBC5C76727dd694E92F57f3fD](https://lineascan.build/address/0xD96d54E54186116fBC5C76727dd694E92F57f3fD)
* Aave USDT Dest Vault: [`0x68e93d2f0781864cF6F370Ecc3B7240738DE15f7`](https://lineascan.build/address/0x68e93d2f0781864cF6F370Ecc3B7240738DE15f7)

### Utils

* Solver Root Oracle: [0x24127aaD4FB9E7d52803fa6860B9964537127E00](https://lineascan.build/address/0x24127aaD4FB9E7d52803fa6860B9964537127E00)
  {% endtab %}

{% tab title="Ethereum Sepolia" %}

### Core System Registry

* System Registry: `0x25F603C1a0Ce130c7F25321A7116379d3c270c23`
* Autopilot Router: `0x69410c9155c863670f81B7eceC60C6706f01a3Dd`

### Autopools

* autoETH: `0xadEe3Fd7D10Ed834175Da327b95755B879194a03`
  {% endtab %}
  {% endtabs %}


# Security and Audits

Various Security Audits Below

## Bug Bounty

Our current bug bounty program can be found on Remedy:\
<https://r.xyz/bug-bounty/programs/tokemak>

## Audits

### Hexens

autoUSD Audit - March 2025

[Read more](/developer-docs/security-and-audits/hexens-autousd-march-25th-2025)

Autopilot Full System Audit - May 2024

[Read more](/developer-docs/security-and-audits/hexens-tokemak-autopilot-may-2024)

Autopilot Full System Follow Up - July 2024

[Read more](/developer-docs/security-and-audits/hexens-autopilot-follow-up-updates-audit-july-2024)

### Certora

LMPStrategy Security Assessment & Formal Verification Report - Jan/March 2024

[Read more](/developer-docs/security-and-audits/certora-lmpstrategy-security-assessment-and-formal-verification-report-jan-march-2024)

### Hats Finance - Autopilot

Crowd Competition Smart Contract Audit, February - March 2024

[Read more](/developer-docs/security-and-audits/hats.finance-crowd-competition-smart-contract-audit-february-march-2024)

### Halborn - Autopilot

Autopilot (Autopools) Contracts - Preliminary Smart Contract Audit - Sept 2023

[Read more](/developer-docs/security-and-audits/halborn-autopilot-autopools-contracts-preliminary-smart-contract-audit-sept-2023)

### Halborn - Autopilot

Autopilot Pricing Contracts - Formal Verification Report - Sept 2023

[Read more](/developer-docs/security-and-audits/halborn-autopilot-pricing-contracts-formal-verification-report-sept-2023)

### Sherlock - Autopilot

Autopilot Contracts - Crowd Competition - Sept 2023

[Read more](/developer-docs/security-and-audits/sherlock-autopilot-contracts-crowd-competition-sept-2023)

### Halborn - accTOKE

accTOKE Contract - Nov 2022

[Read more](/developer-docs/security-and-audits/halborn-acctoke-contract-nov-2022)


# Hexens: autoUSD March 25th 2025

{% embed url="<https://drive.google.com/file/d/19kZJEkwiP62HlH33IccWVYaweWE4GEI1/view?usp=sharing>" %}

{% file src="/files/iuFjYxjXPpvxcevjEh5r" %}


# Hexens: Autopilot Follow Up/Updates Audit July 2024

{% embed url="<https://drive.google.com/file/d/1CcKw0ig7eBXV6q8jNjuvOFdEF_ozh_ZE/view>" %}

{% file src="/files/CKMt3Z21V4YCGLgRoWpe" %}


# Hexens: Tokemak Autopilot May 2024

{% embed url="<https://drive.google.com/file/d/16OhVtmuEB57k6tAiGb9Su4gQ9Dy_Nv4n/view>" %}

{% file src="/files/lMfVR3FPW1FB6KXctrNW" %}


# Certora: LMPStrategy Security Assessment & Formal Verification Report - Jan/March 2024

This report describes the specification and verification of the Tokemak v2 LMPStrategy contract using the Certora Prover and manual code review findings. The work was undertaken from January 2nd 2023

{% embed url="<https://certora.cdn.prismic.io/certora/Zhba6TjCgu4jzvAQ_Tokemak-CertoraAuditReport.pdf>" %}


# Hats.Finance, Crowd Competition Smart Contract Audit, February - March 2024

{% embed url="<https://github.com/Certora/tokemak-v2-core-fv/blob/main/Report.md>" %}


# Halborn - Autopilot (Autopools) Contracts - Preliminary Smart Contract Audit - Sept 2023

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS0VKxLL6FMLB1onYrDVu%2Fuploads%2Fm9vasMSC35JbnaqfyPVN%2FTokemak_Autopilot_Smart_Contract_Security_Assessment_Report_Halborn.pdf?alt=media&token=88e90f46-1a34-417a-a586-fa30fdc5d514>" %}


# Halborn - Autopilot Pricing Contracts - Formal Verification Report - Sept 2023

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS0VKxLL6FMLB1onYrDVu%2Fuploads%2FauBJzmmsZIR0afW4AD7c%2FTokemak_V2_Smart_Contract_Formal_Verification_Report_Halborn_Draft.pdf?alt=media&token=71af2020-36c6-4929-b4a7-bbab2d5c64a0>" %}


# Sherlock - Autopilot Contracts - Crowd Competition - Sept 2023

{% embed url="<https://audits.sherlock.xyz/contests/101/report>" %}


# Halborn - accTOKE Contract - Nov 2022

{% embed url="<https://drive.google.com/file/d/1rE-u847zxv49vShADpMhgVIE1cYvZujG/view>" %}


# Integrating

See below for important topics on integrating with the Autopilot system

{% content-ref url="/pages/Q0xkpd3PHHrFGwZcUakh" %}
[4626 Compliance](/developer-docs/integrating/4626-compliance)
{% endcontent-ref %}

{% content-ref url="/pages/U67t68l1saCopXHiZhSK" %}
[Large Withdrawals](/developer-docs/integrating/large-withdrawals)
{% endcontent-ref %}

{% content-ref url="/pages/X2LOfrrLRcHMqYSWeU3p" %}
[Checking for Stale Data](/developer-docs/integrating/checking-for-stale-data)
{% endcontent-ref %}


# 4626 Compliance

Autopools are implemented on top of the ERC-4626 vault standard but do no strictly adhere to the spec. The changes and important information for integration are listed below.

### View Functions as Non-Payable

Due to how pricing and estimation is handled within the Autopool the following functions which are to be `view` functions per the spec are instead implemented as non-payable. Its important to note that these functions DO NOT actually make any state updates but utilize a "read-through-revert" pattern to simulate certain values:

* `previewDeposit()`
* `previewMint()`
* `previewRedeem()`
* `previewWithdraw()`
* `maxDeposit()`
* `maxMint()`
* `maxRedeem()`
* `maxWithdraw()`

### Slippage

Depending on the conditions of the Autopool, the overall market, and the timing of the debt reporting process slippage may be encountered on both entering and exiting the Autopool. It is very important to always check the shares received on entering, and the assets received on exiting, are greater than an expected amount.&#x20;

### Future functionality of Mint + Withdraw

The use of the `mint()` and `withdraw()` flows is not advisable. While currently functional, they may begin to revert in the future. These functions also consistently have more slippage, and use more gas, than their `deposit()` and `redeem()` counterparts due to the necessary calculations performed.

### Exiting the Autopool based on size

The Autopools make an effort to support depositors of any size. Given the number of destinations (DEX's, lending markets, etc) that assets may be deployed to, this quickly becomes a trade-off game involving the assets being worked with, slippage conditions in the market, and the gas needed to retrieve them.&#x20;

The most gas-efficient route is to pull all the assets from either idle or from as few destinations as possible. This is the default behavior through `redeem()`. The Autopilot system keeps a cached set of swap routes on-chain to get out of the assets deployed to these destinations but, depending on size, these routes may be exhausted. To combat this, dynamic swap routes are able to be supplied by the caller. See [Large Withdrawals](/developer-docs/integrating/large-withdrawals) for more information.

On the other end of the spectrum, when the size is so large that slippage outweighs the gas impact, additional functions are being added outside of the 4626 spec. These functions will return the pro-rata share of the underlying assets (LSTs, LRTs, USD derivatives, etc) owned by the user giving them complete control of how/when/if they return to the deposited asset.

It is up to the caller to decide the method for performing the exit.&#x20;


# Large Withdrawals

Learn how to optimize withdrawals to limit slippage.

{% hint style="info" %}
At the end of this document you should be able to utilize your own swap instructions, from 0x or Bebop for example, during your Autopool share redemption.\
\
For an example script of the below:\
<https://github.com/Tokemak/v2-large-withdraw-example>
{% endhint %}

Autopools allow you to deposit and withdraw in the same asset, the base asset,and to do so on-demand. This means when your withdrawal is large enough to require pulling assets from the underlying LP markets you may incur slippage from swapping back into the Autopool's base asset.

By default, the Autopilot system is configured to be able to swap out of these assets all on-chain with no additional work or information needed. However the quality of trade-execution back into the base asset is limited by the liquidity present in the configured routes that are on-chain. We'll outline here how to provide your own routes to optimize withdrawal execution and to set limit slippage controls.

## Determining Swap Amounts

The first step in providing your own routes is to make a rough estimate as to the tokens and amounts that the Autopool will attempt to swap out of. For a TL;DR version, we have provided a package that will give this information for an Autopool and share amount:\
\
<https://www.npmjs.com/package/@tokemak/autopilot-swap-route-calc>\
\
If you're able to use the package then you can skip the following section. However for those that wish to calculate these tokens manually, read on.

### Calculating Manually

If you wish to calculate these values on your own, you should inspect the logic that is performed during the `redeem()`operation on the Autopool: <https://github.com/Tokemak/v2-core-pub/blob/main/src/vault/AutopoolETH.sol#L357>\
\
Some parts to highlight:

* One cannot receive more than assets than the shares valued using withdrawal pricing
* If there are enough assets in idle to cover the value of the shares, no swaps are needed
* The destinations used to pull assets are picked from the withdrawal queue on the Autopool: \`getWithdrawalQueue()\`

## Handling Swaps During Redemption

As with calculating the amounts to swap, we have an interface to get optimal swap executions as well. This is via an API that under the hood utilizes DEX aggregators such as 0x and Bebop. To call:

```postman_json
POST: https://dynamic-swap-routes.tokemaklabs.xyz

{
    "chainId": 1,
    "systemName": "gen3",
    "slippageBps": 10,
    "tokensToLiquidate": [{
        "token": "0x....",
        "amount": "100000000000000000",
        "buyToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }]
}
```

Where the `tokensToLiquidate` is the output from the package [@tokemak/autopilot-swap-route-calc](https://www.npmjs.com/package/@tokemak/autopilot-swap-route-calc) package above. `systemName`stays "gen3".

The `results`from the API output is what will be later passed into our Router for execution:

```postman_json
{ 
    "success": true, 
    "results": [ { 
        "fromToken": "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0", 
        "toToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", 
        "target": "0x39dd8eff184B860eE7FFe3676eB5102e29a57329", 
        "data": "0x..." 
    } ] 
}
```

### Custom Swap Handling

It's possible to use your own contracts as well during the swapping and redemption process instead our API and swapper contracts. To illustrate what would need to be done lets look at the execution flow.

During the `redeem()`process, our swapper contracts are engaged 0..n times based on the amount of shares being redeemed and the Destinations/markets we need to pull from to satisfy. For example:

* User is redeeming 100 Autopool shares worth 102 ETH (idle only has 5 ETH so it can't cover)
* The Autopool has 50 ETH worth of assets deployed to the first Destination in the withdrawal queue and 200 ETH worth of assets deployed to the second Destination in the withdrawal queue.
* The first Destination is a wstETH/WETH and the second a pxETH/rETH&#x20;
* Lets assume all assets are priced at 1 ETH. \
  We would expect our swapper contracts to be engaged 3 times:
  * Swap 25 wstETH into WETH
    * This swaps to WETH because the asset() on the Autopool is WETH
    * Since the second token in this Destination is already WETH, it is skipped for swapping
  * Swap 26 pxETH into WETH
  * Swap 26 rETH into WETH
* We exhausted the 50 ETH worth of assets from the first Destination and then moved to the second to get the remainder

Using the output from our API as an example you'd construct an array of the `fromToken,toToken,target,data` for each of three tokens above, wstETH, pxETH, and rETH:

* `target`is the contract you want us to call
* `data`is the call data you'd want us to use to call your `target`
* Before your function is called the assets to be swapped will be transferred to the `target`
* Before the execution of the function ends, the contract should transfer the new assets back to the msg.sender.

## Constructing the Final Transaction

Redemption with custom swap routes is only possible through our Autopilot Router multicall contract (see [Contract Addresses](/developer-docs/contracts-overview/contract-addresses)).  There are multiple ways to construct the call but ultimately you are attempting give the Router access to your tokens (through approvals, sending, or having the Router pull them) and calling `redeemWithRoutes()`

{% hint style="info" %}
&#x20;It is very important not to leave tokens in the Router contract at the end of execution
{% endhint %}


# Checking for Stale Data

It is our recommendation to check for stale debt reporting before performing a read or write operation against the Autopool. While our systems strive to ensure that the reporting information is always up to date, outages or other network issues have the possibility to prevent this. Should the debt reporting data be stale, users shares and or value can be misrepresented.&#x20;

To check for this state the Autopool exposes a `oldestDebtReporting()` function. If this returned timestamp is older than 1 day, you should prevent your operation from executing.


# Community Resources

## Links

<table data-header-hidden data-full-width="true"><thead><tr><th width="250"></th><th></th></tr></thead><tbody><tr><td>Main Site</td><td><a href="https://auto.finance/">https://auto.finance</a></td></tr><tr><td>App</td><td><a href="https://app.auto.finance/">https://app.auto.finance/</a></td></tr><tr><td>Github</td><td><a href="https://github.com/Tokemak/v2-core-pub">https://github.com/Tokemak/v2-core-pub</a></td></tr><tr><td>X - Main</td><td><a href="https://x.com/autopools">https://x.com/autopools</a></td></tr><tr><td>X - Backup (Old)</td><td><a href="https://x.com/TokenReactor">https://x.com/TokenReactor</a></td></tr><tr><td>Auto Blog (Old Domain)</td><td><a href="https://blog.tokemak.xyz/">https://blog.tokemak.xyz/</a></td></tr><tr><td>Discord</td><td><a href="http://discord.gg/tokemak">http://discord.gg/tokemak</a></td></tr></tbody></table>


