# Dolomite

Dolomite is a next-generation decentralized money market protocol and DEX that offers broad token support and capital efficiency with its virtual liquidity system.

Dolomite combines the strengths of a DEX and a lending protocol into the most capital efficient and modular protocol DeFi has seen yet! Dolomite is capable of offering over-collateralized loans, margin trading, spot trading and other financial instruments.&#x20;

Dolomite makes hedging your portfolio, leveraging it, or unlocking dormant equity a breeze through its broad token support, capital efficiency, and non-rent seeking model for passing through DeFi rewards to users. Over time, Dolomite aims to become a hub for DeFi activity to allow other protocols, yield aggregators, DAOs, market makers, hedge funds, and others to manage their portfolios and run on-chain strategies.

## What makes Dolomite's architecture special?

<figure><img src="/files/l9llJgJ5Corl506uu4Xm" alt=""><figcaption><p>A diagram showcasing Dolomite's architecture</p></figcaption></figure>

Dolomite has an extremely modular architecture that's composed of two layers - the core (immutable) layer & the module (mutable) layer.

Dolomite was designed to embody the ethos of DeFi, utilizing an immutable base layer that can only change certain configuration parameters (as explained in the [Admin Privileges](/admin-privileges) section) as well as retaining much-needed modularity to adapt to new environments, trends, and paradigms as DeFi continues to evolve. This modularity allows for a clear upgrade path that preserves the core behavior of Dolomite while being able to introduce new features that don't conflict with previously-deployed modules.

The above diagram showcases some of the features Dolomite can create, integrate, or embed into its core margin protocol to offer unique ways for you to manage your portfolio. All of the different modules are created by sending `Operations` through to the immutable layer with any sequence of `Actions`. While some of the actions shown are fairly standard, the most interesting of them shown is `Transfer (with internal liquidity)` and the two `Trade` actions. Transferring allows you to move funds between subaccounts or between different wallets altogether. Trading enables you to use your liquidity to trade with external systems (potentially using flash loans, which are *free* on Dolomite) or between other sources of virtual liquidity (in the case of `Trade with internal liquidity`).

This model opens the doors for a lot of interesting features in the future  and new ways to tap into Dolomite's lending protocol. Some examples include:

* Pair trading
* Impermanent Loss (volatility) trading
* Trading within Dolomite using various DEX models (while still earning lending yield at the same time!)
* Trading with external sources of liquidity through an aggregator or native DEX adapter
* Borrowing against diverse assets while continuing to earn boosted rewards, like `GLP`, `plvGLP` and Camelot's nitro pools
* Listing assets that have restrictions on usage to handle economic and technical risk, like `jUSDC`, Atlas SI tokens, and Lyra's option vaults

## What is capital efficiency?

Dolomite's architecture enables capital efficiency in a few ways because of Dolomite's virtual liquidity system. Importantly, Capital Efficiency in this context means the ability to recycle or reuse liquidity in more than one way to receive multiple sources of yield at the same time.

### Reusing Liquidity

Dolomite enables capital efficiency through its Trading of internal liquidity by easily allowing users to earn swap fees at the same time as lending yield (shown below).

<figure><img src="/files/kIMraZqeX9hwYTuRf1Aa" alt=""><figcaption><p>A diagram showing the ability to earn lending yield and swap fees at the same time on Dolomite</p></figcaption></figure>

As Dolomite evolves to offer more ways to trade with internal liquidity or liquidity deepens, the more utility Dolomite can offer to users as a money market protocol. Consider the example of the USDC depeg event that happened in March of 2023. Users that held USDT collateral in money markets like AAVE were unable to withdraw their liquidity because all  USDT was being utilized to lever up and purchase de-pegged USDC. With Dolomite's internal liquidity capability, users could have swapped their *virtual USDT* for some asset to be able to withdraw from the system. Or more interestingly, users could have borrowed virtual USDT and traded it with internal liquidity and never withdrawn it from the system at all; thus leaving more USDT available in Dolomite to process withdrawals and keeping borrow interest rates cheaper.

Why would this keep interest rates cheaper? Consider the example where Dolomite allows a user to borrow USDT from `sub account 1` to `sub account 0`. In this example, Dolomite's borrow balance for USDT would go up but so does it its supply balance *by the same amount*. Let's walk through this step by step below.

{% code overflow="wrap" fullWidth="false" %}

```
User A balances:
+1 ETH in sub account 0

User B balances:
+0.1 ETH in sub account 0
+1,000 USDT in sub account 0

Dolomite overall balances:
+1.1 ETH supplied
+1,000 USDT supplied
0 USDT borrowed
Utilization rate of USDT: 0%

Actions:
1. User A transfers 1 ETH as collateral to sub account 1 from sub account 0

2. User A transfers 100 USDT from sub account 1 to sub account 0. Since User A had a balance of 0 in sub account 1, their balance moves into a borrowed state. Sub account 0 receives the funds.

User A balances:
0 ETH in sub account 0
+100 USDT in sub account 0
+1 ETH in sub account 1
-100 USDT in sub account 1

Dolomite overall balances:
+1.1 ETH supplied
+1,100 USDT supplied
-100 USDT borrowed
Utilization rate of USDT: 9.09%

Post Actions:
If User A decides to withdraw the +100 USDT from sub account 0, that would push the utilization toward 10% (supplied amount would be +1,000 USDT and borrowed amount would still be -100 USDT). 

However, if Dolomite had competitive internal liquidity for trading the USDT, it would keep the ERC20 tokens internalized to the system and would keep utilization lower! Why is that? If User A trades the +100 USDT with User B's 0.1 ETH, the net balance of ETH and USDT remain the same from the overall perspective of Dolomite. (+1.1 ETH, +1,100 USDT, -100 USDT).
```

{% endcode %}

### Retaining Control over your Assets

Dolomite empowers users to retain control over their assets with its innovative [Isolation Mode](/risk-management#isolation-mode) and virtualized liquidity. Using `plvGLP` as an example, you can stake your entire deposited `plvGLP` balance from within Dolomite while continuing to borrow against your entire virtual balance across as many isolated positions as you'd like.

<figure><img src="/files/ecyYSNS5gQ2lyIygnI45" alt=""><figcaption><p>The plvGLP balance row on the Balances page</p></figcaption></figure>

<figure><img src="/files/abtCPHbpIcHBRbQ7ujRX" alt=""><figcaption><p>The Claim Rewards panel for plvGLP</p></figcaption></figure>

From Dolomite's interface, you can claim your PLS rewards the same way your normally would on Plutus' web application while having the ability to borrow against your `plvGLP`!

## What is broad token support?

Dolomite is the first lending protocol to be able to list thousands of assets within a central pooling architecture. Morevoer, Dolomite was built to support a diverse set of assets, not just typical ERC20 tokens.&#x20;

Going back to the prior example of `plvGLP`, Dolomite allows you to stake or un-stake your deposited `plvGLP` and borrow against your staked `plvGLP` despite the fact that staked plvGLP is not tokenized! This represents a breakthrough in which users can finally work with non-standard tokens from a lending protocol and continue to participate in the respective token's ecosystem (in this case `plvGLP`).


# DOLO

DOLO is the governance token for the Dolomite protocol, designed to align incentives and foster sustainable growth.

## Generation Event

The DOLO Token Generation Event (TGE) occurred on Berachain and Ethereum on April 24, 2025. DOLO is issued as an ERC20 token on Berachain, Ethereum, and Arbitrum, leveraging a burn-and-mint model for enhanced transparency and interoperability. To ensure accurate supply tracking, we've built an API endpoint that aggregates DOLO across all networks and reports it to popular services like CoinMarketCap and CoinGecko. \
\
Cross-chain compatibility is be enabled via Chainlink’s Cross-Chain Interoperability Protocol (CCIP), allowing seamless integration with other Layer 2s and alt-L1 networks. This approach ensures accurate supply dynamics, broader accessibility, and streamlined tracking across supported networks.


# Token Mechanics

Dive into how DOLO, veDOLO, and oDOLO form the core of the Dolomite ecosystem

With a total fixed supply of 1,000,000,000 tokens, DOLO leverages mechanisms inspired by successful DeFi models, while integrating unique innovations tailored to Dolomite’s ecosystem. The distribution of DOLO is structured to incentivize community participation, protocol growth, and alignment with long-term stakeholders.

### The Virtuous Cycle

DOLO’s tokenomics are designed to create a **self-sustaining virtuous cycle** that aligns incentives across all stakeholders:

1. oDOLO introduces **buy pressure** as users must hold DOLO for the pairing process, and then purchase discounted veDOLO
2. Protocol-owned liquidity (POL) grows from veDOLO purchases, providing stability, growing borrow liquidity depth, and increasing platform attractiveness.
3. More liquidity attracts users, increasing protocol revenue.
4. As governed by the DAO, when the protocol has grown its revenue and matured enough, protocol fees can be distributed to veDOLO stakers, incentivizing further DOLO staking.

{% hint style="info" %}
This cycle ensures that participants benefit proportionally from the protocol’s growth, fostering long-term ecosystem alignment.
{% endhint %}

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

## DOLO

Contract Address: `0x0F81001eF0A83ecCE5ccebf63EB302c70a39a654` (all chains)

DOLO is a standard ERC-20 token without any of the additional functionality tied to veDOLO or oDOLO.  DOLO plays a foundational role in the Dolomite ecosystem by enabling exchange liquidity, transferability, lending, and an on ramp for new users into the Dolomite ecosystem.

### Key features:

* **Liquidity Provision**: DOLO powers the initial exchange pools, ensuring a robust and accessible trading environment.
* **Governance Flexibility**: Serves as the foundation for governance participation when converted to veDOLO.
* **Future-Proof Utility**: Supports long-term growth with an inflation mechanism designed to fund ecosystem expansion and strategic initiatives.

### Genesis and Deployment on Berachain

DOLO will launch as an ERC-20 token on **Berachain** using a **lock-and-mint mechanism** powered by Chainlink’s Cross-Chain Interoperability Protocol (CCIP). This allows seamless token movement across the Dolomite ecosystem.

* DOLO’s total supply will be managed and locked on Berachain.
* The **lock-and-mint model** ensures supply transparency and facilitates tracking on platforms like CoinMarketCap.
* Over time, DOLO will freely flow between networks where Dolomite is deployed.

### Initial DEX Liquidity

Dolomite will launch initial DOLO liquidity through 2 pools one on Kodiak on Berachain and a second on Uniswap on Ethereum main net. The DAO will manage **protocol-owned liquidity (POL)** to ensure a robust trading environment and to support liquidity mining incentives over time.

### Inflation

Starting in year 4 DOLO will adopt a **3% annual inflation rate**. This inflation is designed to:

* Fund ecosystem growth and liquidity incentives.
* Allow the DAO to allocate tokens toward strategic initiatives or burn them entirely based on governance decisions.

The inflation mechanism ensures that the protocol has the resources needed to sustain long-term development while giving the DAO flexibility to adapt to market needs.
{% endtab %}

{% tab title="veDOLO" %}

## veDOLO

Contract Address: `0xCB86B75EE6133d179a12D550b09FB3cdB1e141D4` (Berachain)

Vote Escrowed DOLO allows users to maximize their involvement in Dolomite by staking DOLO to gain governance influence and earn rewards. With its flexibility and additional utilities, veDOLO strengthens user engagement and aligns long-term incentives for ecosystem growth.

### Key features:

* **Voting**: Influence protocol governance, asset listings, and upgrades.
* **Potential Fee Collection**: If activated as a feature by the DAO, earn a share of fees generated by Dolomite's operations, including POL earnings and transaction fees.
* **Boosting**: Increase emissions rewards for liquidity pools based on voting weight.
* **Transferrable**: veDOLO is implemented as an NFT, offering transferability and the ability to merge or split locks.

### Lock Durations and Features:

veDOLO allows users to lock their DOLO tokens for durations of up to 2 years, offering flexibility for participants to choose short-term or long-term staking. The more time remaining on the lock, the greater vote weight. Users can break their locks early by paying an **exit fee**, which includes a fixed **burn fee of 5%** (modifiable via governance) and a **recoup fee** that starts at 50% for a 2-year lock and decays linearly to 0% as the lock matures.  These mechanisms promote ecosystem stability and ensure alignment between users and the protocol.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdIMIEKbOd3ELpwRbKSXq12p8-WS2-7ipiPyl6qS_h8oxtmSWmeEOnnhg1wdyxnzclTJCUnFEViXhpsGL0sYXCqWCBqeRhRnA0ub8W-0hBqgX-ZRqDvQ-ITbR1yfDI26947NH7Mcw?key=52VsImqHWbclzPafyJeGRg" alt=""><figcaption><p>veDOLO exit fee schedule</p></figcaption></figure>
{% endtab %}

{% tab title="oDOLO" %}

## oDOLO

Contract Address: `0x02E513b5B54eE216Bf836ceb471507488fC89543` (Berachain)

The **oDOLO token** serves as an innovative mechanism to reward liquidity providers. Distributed weekly, oDOLO must be paired 1:1 with DOLO to convert into discounted veDOLO. This system creates buy and borrow pressure on DOLO and supports protocol-owned liquidity (POL).

Once pairing is completed, veDOLO can be purchased at a discount from market price, either creating a new veDOLO lock or adding to an existing one. The discount depends on how much time the lock is for, with a 50% discount for 2 years and 5% for 1 week.

### Key Features:

* **Pairing Duration**: 1 week&#x20;
* **Discounts**: Linear discounts from 5% to 50%, depending on veDOLO lock duration.
* **POL Growth**: Accumulated liquidity can be converted to stablecoins or other key assets to support protocol stability.

By encouraging participants to lock their tokens for longer durations, oDOLO strengthens Dolomite’s ecosystem while discouraging short-term, mercenary behavior.

### Instant Exit for oDOLO

For participants who wish to liquidate oDOLO without pairing, the protocol allows for an **instant exit** option through a buyback mechanism funded by **recoup fees**:

* The DAO will buy back oDOLO at a rate determined by the DAO.
* Recoup fees are stored in a liquidity pool specifically allocated for these buybacks, funded by penalties paid for early veDOLO lock breaks.
* If the pool depletes, buybacks pause until additional recoup fees are accrued.

This feature discourages dumping and supports healthy token circulation, ensuring the system maintains stability and long-term incentives.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXetaDMKduXvovqbRpjFdPKUBPKQVGUe1OTlzmY269L48Sg8BC-PP8l_MpeC7YWqkzXxK7z07LuvJMK8oglvGvwsKu1gHS-iKK4HXJ4e5cSOVGZiARK2BZnYg4NRVn-aGIzfoQhwwg?key=52VsImqHWbclzPafyJeGRg" alt=""><figcaption><p>oDOLO distribution chart</p></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdbIdhD4rVkvbP5Ws4T6Soxm9YLOSTgLVM-bXETp47l5S7WelEWWOm66cWpLdG41eMPvx3mFltvzE9l96LJiDplXJMJQUzpEtq9mdufkyO0NET9EHexjLE7B5x1aTy-lTwClT3e6f8w7LbiaZ_mitEPbxc?key=52VsImqHWbclzPafyJeGRg" alt=""><figcaption><p>veDOLO purchase discount by lockup duration</p></figcaption></figure>
{% endtab %}
{% endtabs %}


# Airdrop

**DOLO Airdrop Overview**

The DOLO airdrop is designed to put governance in the hands of early users and contributors to Dolomite while fostering community engagement and long-term alignment with the protocol. This airdrop event is a critical part of the DOLO Token Generation Event (TGE) and serves as a means to distribute tokens to those who have supported Dolomite during its growth and development.

***

#### **Airdrop Allocation**

The total allocation for the DOLO airdrop represents 20% of the total token supply. This allocation is divided into three distinct categories:

1. **Rewards for Community Contributions (1%)**
   * Distributed to individuals who have directly contributed to Dolomite’s growth and development.
   * Includes security researchers, integrators, dashboard creators, and select community members.
   * Acknowledges contributions such as smart contract audits, integrations, and active community support.
2. **Rewards for Platform Usage (9%)**
   * Distributed to users who interacted with and used Dolomite on supported networks (e.g., Arbitrum One, Mantle, Polygon zkEVM, and others).
   * Allocation factors:
     * Dollar value of assets supplied
     * Dollar value of assets borrowed
     * Amount of time supplying
     * Amount of time borrowing
   * Distribution split:
     * **50% in DOLO:** Transferable and tradable.
     * **50% in veDOLO:** Time-locked for two years. Locks can be broken early but will incur fees.
   * XP Level: Allocations receive a bonus based on the user’s Dolomite XP level, putting more tokens in the hands of the most active community members.
     * +5,000 DOLO for level 5+
     * +20,000 DOLO for level 10+
     * DOLO airdrop is multiplied by your level at the time of the snapshot, with a maximum bonus of 500,000 DOLO
3. **Options Airdrop for Minerals Holders (10%)**
   * Available to holders of “Minerals”, earned via Dolomite’s Minerals Program by providing key borrowable assets (e.g., USDC, ETH, WBTC).
   * Eligible users can purchase DOLO at a set price of $0.045 for up to 6 months after TGE, representing a $45M fully diluted valuation (FDV).
   * Funds from purchased DOLO tokens are used to bootstrap protocol-owned liquidity (POL).

***

#### **Eligibility Criteria**

The airdrop eligibility is determined based on the following factors:

* **Snapshot Date:** A snapshot of user activity on Dolomite was taken on January 6th at 0:00 UTC.
* **Minerals Program Participation:** Users who earned “Minerals” by supplying assets to Dolomite.
* **Liquidity Provision History:** Historical data on assets supplied, duration, and total amount deposited.
* **Borrows History:** Historical data on assets borrowed, duration, and total amount borrowed.
* **Dolomite XP Program:** Bonus multipliers based on a user’s engagement level in the Dolomite XP Program.

***

#### **Unclaimed Tokens**

Any unclaimed tokens from the airdrop allocation will be returned to the Dolomite DAO Treasury six months after TGE. These tokens may be redistributed or utilized at the DAO’s discretion.

***

#### **Purpose of the Airdrop**

The airdrop aligns with Dolomite’s commitment to decentralized governance and community empowerment. By distributing DOLO to active users and contributors, Dolomite ensures that its community has a direct stake in the protocol’s success and governance. The inclusion of veDOLO in the rewards structure encourages long-term alignment and participation.

For more details on the DOLO airdrop and updates, visit the Dolomite documentation or join the community on [Discord](https://discord.gg/uDRzrB2YgP).


# Distribution

## 🧩 DOLO Token Distribution

The total supply of **DOLO** is capped at **1,000,000,000 tokens**, with allocations carefully designed to promote long-term protocol alignment, sustainable liquidity, and decentralized governance.

This section breaks down the initial distribution and vesting schedules across all categories.

***

### :key: Key points

* Total token supply: 1,000,000,000
* Total unlocked at TGE: 415,404,000&#x20;
* Total circulating DOLO at TGE: 326,650,000&#x20;
* Total circulating veDOLO at TGE: 79,050,000

### 📊 Token Allocation Overview

| Category                                           | Allocation   | Vesting / Notes                                                                                                                                  |
| -------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Community**                                      | **50.7500%** | See breakdown below                                                                                                                              |
| └─ [Liquidity Mining](/dolo/token-mechanics#odolo) | 20.0000%     | oDOLO emissions over time                                                                                                                        |
| └─ Protocol-Owned Liquidity (POL)                  | 2.0000%      | Seeded as liquidity on Kodiak and Uniswap                                                                                                        |
| └─ Boyco Incentives                                | 3.0000%      | Emitted as veDOLO                                                                                                                                |
| └─ Future Partner Rewards                          | 5.7500%      |                                                                                                                                                  |
| └─ [**Airdrop**](/dolo/airdrop)                    | 20.0000%     |                                                                                                                                                  |
| └─ Minerals Claimers                               | 10.0000%     | Call Options with $0.045 strike                                                                                                                  |
| └─ Retroactive Usage                               | 9.0000%      | 50% DOLO, 50% veDOLO                                                                                                                             |
| └─ Early Contributors                              | 1.0000%      | Mix of DOLO and veDOLO                                                                                                                           |
| **Core Team**                                      | 20.2075%     | 3-year vesting w/ 1-year cliff                                                                                                                   |
| **Foundation**                                     | 10.6511%     |                                                                                                                                                  |
| **Investors**                                      | 15.1846%     | <p>1.3933% (13,933,333 DOLO) vests over the first 12 months. <br></p><p>13.7913% (137,913,000 DOLO)   vests over 3-years with a 1-year cliff</p> |
| **Service Providers**                              | 3.0000%      |                                                                                                                                                  |
| **Advisors**                                       | 0.2068%      | Vested over 2 -3 years with a 1-year cliff                                                                                                       |

### 🧮 Visual Summary

<figure><img src="/files/zNy94uxjeKYKjHTquLvd" alt=""><figcaption><p>Token Distribution as of 4/24/2025</p></figcaption></figure>

<figure><img src="/files/sYWQtE2CMYVJyA2zaNZz" alt=""><figcaption><p>Token Unlock Schedule over 4 years, as of 4/24/2025</p></figcaption></figure>

***

### 📈 Long-Term Inflation

After **Year 4**, a **3% annual inflation** rate begins (modifiable by governance). The DAO may vote to:

* Use all tokens
* Burn some or all tokens
* Allocate tokens to new incentive programs

Burning tokens is equivalent to disabling inflation for that year.

***

### 🔐 Key Design Goals

* Encourage **long-term alignment** with protocol health
* Accumulate **protocol-owned liquidity**
* Create sustainable incentives via **veDOLO** and **oDOLO**
* Empower early adopters and active community members

***


# Dolomite Governance

## Overview

Dolomite's governance system empowers veDOLO holders to shape the protocol's future. Governance decisions are structured around defined **proposal types**, which are the key areas the DAO can vote on:

* Asset Listing/Delisting
* Tokenomics Changes
* Risk Parameter Updates
* Treasury Allocations
* Incentive Program Changes

The DAO is represented as a legal entity in the Marshall Islands, with Dolomite Ltd (BVI) as the token issuer, and the Dolomite Foundation (Cayman Islands) serving as a steward. Leavitt Innovations is an entity contracted by the Dolomite Foundation for development and maintenance of the protocol.

{% hint style="info" %}
While asset listings and risk parameter updates can be voted on through the DAO, the operators of the protocol can also perform these tasks for the purpose of managing the protocol. The DAO is best utilized for larger tasks such as updates to tokenomics, treasury, and incentives.
{% endhint %}

***

## Voting Process

Dolomite governance flows from community discussion to formal execution, with veDOLO vote weight determining participation rights at each stage.

1. **Proposal Drafting** – Community members or DAO participants with enough veDOLO vote weight prepare a proposal.
2. **Discussion** – Proposal is posted in the Governance Forum on Discord for community feedback. Role-based permissions (from veDOLO holdings) determine whether you can propose, comment, or react.
3. **Temp Check on Discord** – A system will be designed to run temperature checks on proposals within the Governance Forum. This may be gated to veDOLO holders or open to all for feedback.
4. **Quarterly Proposal Compilation** – All proposals from the prior three months that pass the temp check are bundled together for a single quarterly vote. veDOLO holders can then vote yes/no on each proposal in the bundle.
5. **Quarterly On-Chain Vote (BeraVote)** – Voting takes place once per quarter on BeraVote. This ensures veDOLO holders only need to concentrate on voting four times per year, while still enabling active participation in proposal development year-round.
6. **Execution** – Passed proposals are implemented by Leavitt Innovations, LLC, the operating company that manages the Dolomite protocol.

**Launch parameters:**

* Voting period: \~7 days
* Quorum: &#x35;*% veDOLO supply*
* Proposal threshold: *pass temp check on Discord*

***

## Governance Forum Access & Roles

The **Dolomite Governance Forum** is hosted on Discord and integrated with Galxe for wallet verification. Your veDOLO balance determines your role and permissions:

* **1M+ veDOLO** → Can create proposals.
* **10k+ veDOLO** → Can comment on proposals.
* **1k+ veDOLO** → Can upvote/react to proposals.
* **No veDOLO** → Read-only access.

**How to link your wallet & get a role:**

1. Join the [Dolomite Discord](https://discord.gg/dolomite)
2. Verify your humanness
3. Link your Galxe account in the Bot Commands channel
   1. Verification of wallet ownership for wallet linking is performed through [Galxe](https://galxe.com)
4. Your role updates automatically based on veDOLO holdings in your Galxe linked address

Your exact voting weight can be viewed anytime on the [veDOLO page](https://app.dolomite.io/veDOLO).

***

## Proposal Templates

{% tabs %}
{% tab title="Listing Proposal" %}
Template with details of each section: [Template](https://docs.google.com/document/d/1ckpF-xTRyUnUKaVzrDW-C9lJLvfpRpAewZw1b4ug6nE/edit?usp=sharing)

{% hint style="info" %}
If your proposal is too long to fit into a Discord forum post, split it into two pieces and put the second piece in the first reply to your post
{% endhint %}

Formatted for Discord:

```
# Title

[DIP-X] List ARB as a Collateral Asset on Arbitrum

# Author(s)

Include name(s), role(s), and affiliation (e.g., team member, community member, partner)

# Date

YYYY-MM-DD

# Related Discussions

Link to any relevant forum posts, Discord threads, or Temp Check discussions

# Simple Summary

A brief TL;DR (2-3 sentences) describing what this proposal intends to do and why it matters to Dolomite.

# Abstract

A high-level, non-technical overview of the proposal. Should provide context for the reader, outline the intended change, and summarize the benefits to the Dolomite protocol and community.

# Motivation & Background

Why is this proposal being made?

* What problem does it solve or what opportunity does it capture?
* Why now?
* Include any relevant historical context or community discussions.
* If this affects user experience, security, liquidity, market expansion, or growth, explain how.

# Proposal Type - Asset Listing

# Specification

* Name of asset or assets
* Token address or addresses
* Chains
* Protocol name
* Project website
* Project documentation
* Project security audits
* Project X/Twitter account
* Price oracles that support the asset(s)
* Link to media kit for the asset(s)

# Asset Details

* Is there a lending market that currently supports the asset(s)?
* Is there built-in functionality that you’d like supported? (vesting/staking/voting/rewards/PoL)
* What are the assets? What do they do? Are they yield bearing? How are people using them?
* If the asset(s) are yield bearing, what is the API endpoint where the yield can be retrieved?
* If applicable, do the asset(s) have a redemption mechanism within the protocol? For example, a redemption that can be used in the case of liquidation to convert the asset(s) into a different or more liquid asset in order to repay lenders, in place of using a DEX?
* If applicable, are there any DEXs that list the asset(s)? If so, which ones, and how much liquidity?
* Are there any rewards programs or incentives to drive initial usage to Dolomite?
* How do you see the asset(s) effectively launching and growing in usage on Dolomite?
  * Dolomite will be the first/only lending market for the asset(s)
  * The asset(s) are generally high yielding, and will be of interest for users to hold and use for looping strategies
  * The asset(s) fit well with existing assets on Dolomite, enabling new or more efficient borrowing, lending, looping, and/or strategies
  * The listing will be paired with incentives to build up initial liquidity, enabling more borrowing, after which the interest earned on lending will draw suppliers
  * A strong co-marketing campaign will effectively drive users to supply
  * The initial liquidity will be seeded by your protocol/DAO, which will enable borrowing and strategies, after which the interest earned on lending will draw suppliers
* Additional details and information

# Suggested Risk Parameters

* Max LTV %
* Liquidation Threshold %
* Liquidation Bonus %
* Supply Cap x units
* Borrow Cap x units

# Market Information

* Market cap
* Daily trade volume
* Top trading venues
* Historical volatility
* Holder concentration

# Additional Information & References

* [Dolomite DOLO Mechanics Documentation](https://docs.dolomite.io/dolo/token-mechanics)

```

{% endtab %}

{% tab title="Tokenomics Change" %}

Template with details of each section: [Template](https://docs.google.com/document/d/1UdTZCALATaz1UDA7SiVZ8KI0kaChmyViGQ0RExSUMUg/edit?usp=sharing)

{% hint style="info" %}
If your proposal is too long to fit into a Discord forum post, split it into two pieces and put the second piece in the first reply to your post
{% endhint %}

Example proposal, formatted for Discord:

```
# Title

[DIP-02] Adjust oDOLO Emissions Distribution Across Chains & Assets

# Author(s)

Dolomite Team

# Date

2025-08-13

# Related Discussions

None

# Simple Summary

This proposal updates the chain-level and asset-level distribution of oDOLO emissions. It reallocates emissions to account for the launch of Botanix and adjusts existing weights to balance incentives across chains and assets.

# Abstract

Currently, oDOLO emissions are allocated across Arbitrum, Berachain, and Ethereum. This proposal modifies the chain distribution to add Botanix and adjust weights on the existing chains. It also updates the internal asset distribution on Berachain to include BYUSD and rebalance existing asset weights.

# Motivation & Background

* Support the launch and growth of Botanix by allocating a portion of emissions to its assets.
* Give greater support to the growth of liquidity on Abitrum.
* Introduce BYUSD to the Berachain rewards mix to deepen stablecoin liquidity.
* Maintain a diversified allocation to reduce reliance on any single asset or chain.

# Specification

**Chain-Level Distribution**

**Old:**
* Arbitrum - 20%
* Berachain - 45%
* Ethereum - 35%

**New:**
* Arbitrum - 30%
* Berachain - 35%
* Ethereum - 30%
* Botanix - 5%

**Botanix Sub-Allocation**
* BTC - 66.66% of Botanix emissions
* USDC.e - 33.33% of Botanix emissions

**Berachain Sub-Allocation**

**Old:**
* HONEY - 22.22%
* USDC - 22.22%
* BERA - 22.22%
* WBTC - 16.66%
* ETH - 16.66%

**New:**
* HONEY - 20%
* USDC - 20%
* BERA - 20%
* WBTC - 15%
* ETH - 15%
* BYUSD - 10%

# Economic & Market Impact

* **Botanix Growth:** Allocation will bootstrap liquidity and trading activity on Botanix.
* **Stablecoin Depth:** BYUSD inclusion strengthens Berachain’s stablecoin market.
* **Liquidity Shifts:** Arbitrum had been receiving a lower share of oDOLO incentives, but with continued strong activity around GM assets, this update seeks to deepen borrowing liquidity and protocol growth on Arbitrum.

# Risks & Considerations

* Reduced emissions to Berachain and Ethereum may affect growth and liquidity.
* Botanix is a newer and less proven chain, so utilizing incentives there has the risk of less return in TVL.
* BYUSD market depth and stability should be monitored to avoid concentration risk.

# Implementation Plan

* Update emissions distribution in rewards smart contracts.
* Update the UI to reflect the incentives available on Botanix.
* Announce the changes to the community with effective date.

# Success Criteria & Metrics

* Change in TVL of affected assets and chains

# Additional Information & References

* [Dolomite DOLO Mechanics Documentation](https://docs.dolomite.io/dolo/token-mechanics)

```

{% endtab %}

{% tab title="Treasury Change" %}
Template with details of each section: [Template](https://docs.google.com/document/d/1LUTQwazhTbl5CdlhtB03nuWhGp6X7OYOSfyi1TCBQAA/edit?usp=sharing)

{% hint style="info" %}
If your proposal is too long to fit into a Discord forum post, split it into two pieces and put the second piece in the first reply to your post
{% endhint %}

Example formatted for Discord:

```
# Title

[DIP-03] Use Treasury as Collateral to Borrow $500k of WBTC on Berachain, Then Supply on Arbitrum

# Author(s)

Dolomite Team

# Date

2025-08-29

# Related Discussions

N/A

# Simple Summary

This proposal would use treasury USDC.e on Berachain as collateral to borrow WBTC, then bridge that WBTC to Arbitrum to supply on Dolomite. The goals are to arbitrage the rates (low to borrow on Berachain, high to supply on Arbitrum) and increase available borrow liquidity on Arbitrum to support further gmBTC and gmBTC-USD looping.

# Abstract

Dolomite’s treasury currently holds several million dollars of stablecoins on Berachain, accumulated from the options airdrop and oDOLO execution. This proposal would utilize those stablecoins from the treasury that are already on Dolomite on Berachain as collateral to borrow $500k of WBTC, which would then be bridged to Arbitrum to be supplied on Dolomite there.

This will arbitrage the rates across chains, borrowing where rates are cheap on Berachain (0.27% APR at time of writing) and supplying where rates are high on Arbitrum (3.13% APR at time of writing), earning yield for the protocol. Additionally, this will increase lending yield for WBTC suppliers on Berachain, and by boosting the supply of WBTC on Arbitrum, borrow rates will decrease, allowing for more borrowing to perform gmBTC and gmBTC-USD looping strategies. This increases protocol activity, grows TVL, and strengthens Dolomite’s positioning as the premier protocol on Arbitrum for those interested in BTC.

# Motivation & Background

**Why is this proposal being made?**
* The difference in the rates between Berachain and Arbitrum currently present an opportunity.
* Current WBTC supply on Arbitrum is constrained, resulting in higher borrow rates, and limiting the amount of gmBTC and gmBTC-USD looping that can be performed.
* High borrow rates reduce the attractiveness of gmBTC and gmBTC-USD looping, limiting user activity and protocol growth.
* Higher WBTC lending yield on Berachain benefits users there and encourages further deposits.

**Why now?**
* Borrow demand for BTC on Arbitrum is consistently high.
* Dolomite is positioning as a leading protocol on Arbitrum, and much of that usage and growth comes from enabling GMX GM asset looping. Further enabling these loops will help Dolomite maintain and grow its position even as other lending protocols deploy on Arbitrum.
* The treasury has sufficient USDC.e reserves on Berachain to support this move, and it presents an opportunity for the treasury to earn WBTC yield.

# Proposal Type — Treasury Management & Allocations

**Scope of Change**
* Borrow WBTC on Berachain
* Move WBTC to Arbitrum
* Deploy liquidity into Dolomite

**Specification**
* **Current Treasury Assets & Location:** USDC.e on Berachain
* **Target Allocation:**
  * Amount: $500k WBTC
  * Destination Chain: Arbitrum
  * Deployment: Supply WBTC into Dolomite Arbitrum WBTC market
* **Execution Method:**
  * Borrow $500k WBTC on Berachain
  * Bridge $500k WBTC from Berachain → Arbitrum (trusted bridging solution TBD)
  * Deposit WBTC into Dolomite Arbitrum
* **Operational Requirements:**
  * Treasury multisig executes bridge, swap, and deposit
* **Parameters:**
  * Allocation Size: $500k
  * Deployment: Ongoing until governance decides to unwind or reallocate

# Economic & Market Impact

* **Lower Borrow Rates:** Increased WBTC supply directly reduces borrow rates, making gmBTC and gmBTC-USD looping more attractive (likely temporary, as usage of the WBTC for looping would bring the rate back up).
* **TVL Growth:** In the long run, boosted user activity drives higher deposits and borrows.
* **Treasury Growth:** Arbitrages the lending and borrow rates across Berachain and Arbitrum, earning WBTC yield.

# Risks & Considerations

* **Bridge Risk:** Cross-chain transfers inherently carry bridge security risks.
* **Market Risk:** If rates deviate, the yield arbitrage may become no longer profitable.
* **Liquidation Risk:** If the WBTC price spikes, the value of the debt could become too high relative to the USDC.e collateral.
  * This could be mitigated by making a special exception for the treasury to make it exempt from liquidation. This could be done safely due to the assurance that there is WBTC to pay the debt held by the treasury, just located on Arbitrum.

# Implementation Plan

**Timeline**
* Week 1: Governance approval
* Week 2: Borrow WBTC on Berachain
* Week 2: Bridge WBTC to Arbitrum
* Week 2: Deposit WBTC into Dolomite Arbitrum

**Deployment Steps**
* Treasury multisig borrows $500k WBTC
* Execute bridge to Arbitrum
* Supply WBTC into Dolomite

**Responsible Parties:** Treasury multisig signers, Dolomite core contributors  
**Required Approvals:** Governance vote

# Success Criteria & Metrics

* Reduction in WBTC borrow rate on Arbitrum in the short term
* Increase in WBTC supply rate on Berachain in the short term
* Increase in gmBTC and gmBTC-USD looping activity in the long term
* Growth in Dolomite Arbitrum TVL
* Growth in Dolomite Berachain TVL
* Long-term ROI of treasury allocation (WBTC yield from arbitrage)

# Additional Information & References

* [Dolomite Documentation](https://docs.dolomite.io)  
* [Dolomite market stats dashboards](https://dune.com/dolomite_io/dolomite-analytics)

```

{% endtab %}

{% tab title="Coming Soon!" %}
More templates in the works and coming soon!
{% endtab %}
{% endtabs %}

***

## Governance Tools

* **Discord Governance Forum** – Primary discussion hub
* **Bera Vote** – Quarterly on-chain proposal voting


# Roadmap

Dolomite's roadmap is very integration and utility focused for achieving product-market fit.

## Roadmap Updates

* October 13, 2022 - [Dolomite Margin launches on Arbitrum One](https://medium.com/dolomite-official/dolomite-launches-margin-protocol-and-dex-our-journey-begins-862777432414)
* November 3, 2022 - [Dolomite joins Chainlink BUILD](https://medium.com/dolomite-official/dolomite-joins-chainlink-build-to-supercharge-the-adoption-of-our-margin-protocol-b4d69810bb44)
* December 15, 2022 - [Dolomite launches borrow functionality](https://medium.com/dolomite-official/dolomite-launches-powerful-defi-lending-eaa64b4a3d97)
* January 13, 2023 - [Dolomite updates the interest rate models to be more competitive](https://twitter.com/Dolomite_io/status/1614025674599141378)
* March 1, 2023 - [Dolomite launches a new XP system for tracking community engagement](https://twitter.com/Dolomite_io/status/1631108793030397953)

## Announcement Channels

* Medium - <https://medium.com/dolomite-official>
* Twitter - <https://twitter.com/Dolomite_io>
* Discord - <https://discord.com/invite/uDRzrB2YgP>

## Future Roadmap

Dolomite has a community-driven roadmap that's centered around building cooperative integrations with other protocols and enhancing Dolomite's core experience with a richer feature set than any other money market system in DeFi.


# USD1 Points

The USD1 Points Program rewards users for holding USD1 on Dolomite. There’s nothing to claim, no staking, and no extra steps — once you deposit USD1 into Dolomite, you’re automatically earning points.

> You can view your live point totals anytime through the [Rewards page](https://app.dolomite.io/rewards).

* When you **deposit USD1 into Dolomite**, it immediately begins earning both lending yield and USD1 Points.
* You don’t need to stake, lock, or claim anything — it all happens automatically.
* USD1 used as **collateral in a borrow position** continues earning points while in use.
* You can create multiple isolated positions, borrow other assets against your USD1, or loop exposure to increase your overall USD1 balance and point generation.
* Points update continuously based on the USD1 you hold within Dolomite.

{% hint style="info" %}
The USD1 Points program requires a minimum balance of 1,000 USD1 to earn USD1 Points
{% endhint %}

{% hint style="info" %}
Every USD1 you hold inside Dolomite, whether idle, collateralized, or part of a strategy accrues USD1 Points.
{% endhint %}

### **Step by Step**

**Step 1: Deposit**\
Deposit USD1 directly and skip to step 3, or bring any supported asset to Dolomite’s Ethereum deployment and proceed to step 2.

**Step 2: Swap**\
Use Dolomite’s [**Zap to Swap**](https://x.com/Dolomite_io/status/1896908234491076898) feature to convert your deposited assets into USD1 instantly. Zap integrates with Enso to route trades for optimal pricing and minimal slippage.

**Step 3: Earn**\
Once your USD1 is deposited to Dolomite you are earning USD1 points. Whether you utilize your USD1 as collateral in a borrow position or simply supply it on the Earn page, your capital begins generating lending yield, USD1 points, and oDOLO rewards.

**Optional Step 4: Amplify**\
Use your USD1 as collateral, borrow another stablecoin and loop up your exposure.

{% hint style="info" %}
Utilizing leverage can amplify both potential gains and losses. Users should be aware of the inherent risks, including liquidation, and understand the protocol well before participating.
{% endhint %}


# Community XP

One of our core beliefs in what makes a successful protocol is the community that stands behind it.

## What is Dolomite XP?

Put very simply, completing campaigns gets you XP, XP gets you levels, and levels lead to benefits and recognition.

Dolomite XP is our way of recognizing active members of the community and rewarding them in a fun way that lets them build up and show off clout in the community, while also encouraging users to get involved and try out the various features of Dolomite. Participants will also have the opportunity to earn more liquidity rewards, and play a  role in veDOLO governance. To make XP possible, we’ve partnered with [Galxe](https://galxe.com/dolomite/campaigns), a web3 community-building platform very well-suited to this initiative.&#x20;

## How do you earn XP?

Complete tasks called **Campaigns** to earn a range of XP *(typically 10, 20, or 30 XP)*. A campaign will have an XP amount, description, set of related tasks to complete. The XP for a task takes the form of a Galxe OAT, which can be claimed on Galxe on the completion of a campaign.&#x20;

Every new campaign will be announced on the Dolomite Twitter and Discord. It will also be visible on the Achievements page in its correlated category on the Dolomite web app on the [Achievements Page](https://app.dolomite.io/achievements).

<figure><img src="/files/0Ja3ZQudmoj7lE5Rqh04" alt="" width="563"><figcaption><p>Beginner Campaign</p></figcaption></figure>

Here are the general steps to follow for every Campaign:

1. **Read** description and tasks — understand what is needed to complete them.
2. **Click** the `View on Galxe` button to be redirected to the [Galxe](https://app.galxe.com/quest/dolomite/campaigns) page for the campaign. This will allow you to verify when you complete each task.
3. **Complete** tasks; refresh them on [Galxe](https://app.galxe.com/quest/dolomite/campaigns) to verify they're done.
4. **Collect** the [Galxe](https://app.galxe.com/quest/dolomite/campaigns) OAT associated with the campaign. This represents your XP on the blockchain. This new XP will be reflected on the web app shortly afterwards.&#x20;

### Methods to Earn

To adhere to different user risk tolerances and provide an equitable distribution of XP, Dolomite provides many different avenues to earn. The following list of avenues will be in ascending order of assumed difficulty *(easiest to hardest)*:

{% stepper %}
{% step %}

### Milestones

To reward the regular use of Dolomite, XP is provided to users that complete a certain quantity of specific actions. For example, if you've zapped between assets 10 times, or have a Borrow Position or Strategy open for a week or longer — you are eligible for 10 XP.&#x20;

Milestones are among the easiest XP to receive as an average user of Dolomite, rewarding active users without them needing to chase XP.&#x20;

<figure><img src="/files/Y7g5AUSDQGJkWc6CQxrx" alt="" width="518"><figcaption><p>Example Milestone Categories</p></figcaption></figure>

To claim, simply click the `Claim` button on the progress bar, which will redirect you to its associated Galxe page. Connect your wallet, verify the task is completed *(green)*, and claim the OAT to secure the XP on-chain.&#x20;

Find the Milestones page here:\
&#x20;               → [Milestones Page](https://app.dolomite.io/achievements/milestones)
{% endstep %}

{% step %}

### Social Campaigns

XP is rewarded to participants involved in a wide variety of social interaction with Dolomite and its partners. The tasks are straight-forward, and generally require no assets to complete.

<figure><img src="/files/Yhu2xCVKXyemHALWq8RQ" alt="" width="563"><figcaption><p>Example Social Campaign</p></figcaption></figure>

Common campaign activities are:

* **Joining** an in-person Dolomite event.
* **Attending** a Dolomite Community AMA or a Dolomite AMA hosted by another community.
* **Following** Dolomite or a Dolomite partner on social media.
* **Engaging** with large Dolomite announcements *(i.e. retweeting/liking on twitter)*.

Find the Social page here:\
&#x20;               → [Social Page](https://app.dolomite.io/achievements/social)
{% endstep %}

{% step %}

### Special Campaigns

This category of campaigns is usually very specific to a certain task or integration on Dolomite, and generally launched in conjunction with an event such as an integration of a new asset or the launch of a new feature. These are a great way to discover new features, assets, and strategies on Dolomite.

Special campaigns typically requires you to do a variety of *specific actions* with *specific assets*. Due to its nature of interacting with blockchains, assets, and Dolomite, they're usually more engaging and technically difficult compared to the previous avenues of obtaining XP. However, you can often accumulate more XP in a shorter period of time by doing all available special campaigns than with the other categories.

<figure><img src="/files/ceqtQsU8ygQQvUxzIfNX" alt="" width="563"><figcaption><p>Example Special Campaign</p></figcaption></figure>

Not all Special campaigns are the same difficulty, hence we recommend picking campaigns with easy tasks you are confident on completing before harder campaigns. More difficult and engaging Special campaigns will offer more XP.

Find the Special Campaigns page here:\
&#x20;               → [Special Page](https://app.dolomite.io/achievements/special)
{% endstep %}
{% endstepper %}

### Troubleshooting

Sometimes tasks can seem ambiguous/difficult, or perhaps Galxe is having a few temporary issues. Don't panic, the following will walk you through a few troubleshooting options.&#x20;

#### Refresh

Despite the simplicity, many of the temporary technical issues that might occur can be fixed by refreshing the page *(Ctrl/Command + R)*, or waiting. Trouble verifying a task on Galxe can usually be fixed with this method.

#### Check The Guides

For the more difficult campaigns, check if there is a Campaign Guide available that can elaborate on how to complete the campaign.

Find the Campaign Guide Docs here:\
&#x20;              → [Campaign Guides](https://docs.dolomite.io/campaign-guides)

#### Ask in Discord

If you just can't figure out an issue, don't worry — the Dolomite team is happy to help! Simply join the Discord, verify, and ask away. For healthy operational security, ensure you're speaking with a Dolomite team member, don't share sensitive information, and take caution clicking links.&#x20;

Join the Discord:\
&#x20;              → [Dolomite Discord Invite](https://discord.com/invite/dolomite)

### XP to Levels

The mechanic is much like experience points in a video game. Enough XP advances you to a higher level, and each level requires a greater amount of XP than the one before it. The amount of XP required to advance to the next level is equal to the number of the level times 10. So to reach level 1 requires 10 XP, then to reach level 2 requires an additional 20 XP (a total of 30 XP), to reach level 3 requires an additional 30 XP (a total of 60 XP), and so on.

Below is a table with the amount of XP required for the first 10 levels, and the same pattern continues to apply to levels above level 10.

<table><thead><tr><th width="121.66666666666666">Level</th><th width="331">XP to reach level from previous level</th><th>Total XP</th></tr></thead><tbody><tr><td>0</td><td>0</td><td>0</td></tr><tr><td>1</td><td>10</td><td>10</td></tr><tr><td>2</td><td>20</td><td>30</td></tr><tr><td>3</td><td>30</td><td>60</td></tr><tr><td>4</td><td>40</td><td>100</td></tr><tr><td>5</td><td>50</td><td>150</td></tr><tr><td>6</td><td>60</td><td>210</td></tr><tr><td>7</td><td>70</td><td>280</td></tr><tr><td>8</td><td>80</td><td>360</td></tr><tr><td>9</td><td>90</td><td>450</td></tr><tr><td>10</td><td>100</td><td>550</td></tr></tbody></table>

Users technically begin at level 0, but this is not a recognized level. A user must complete at least one task to reach level 1 and have their level recognized.

## Dolomite XP Benefits

To reward loyalty and engagement with Dolomite, many different benefits are provided to users with XP Levels.&#x20;

### Retroactive Airdrop

The $DOLO airdrop includes an allocation for users of Dolomite. A snapshot of user activity and XP Levels occurred **Monday January 6th, 2025 at 0:00 UTC**. A user's Dolomite Level will provide a **boost** to the amount of allocation they receive. The higher the user's level, the better this boost is.

### oDOLO Liquidity Rewards

Your XP Level could play a role in earning oDOLO liquidity rewards. oDOLO is earned by supplying assets that are key to the ecosystem, as decided by the DAO. With the pass of the correlated DAO vote, the higher the level of the user providing liquidity, the more oDOLO received.&#x20;

### Role in Governance

Beyond more fiscal rewards, Dolomite wants to keep critical community members central to the direction of Dolomite.&#x20;

With the passing of a DAO vote, your XP Level could **enhance** the amount of governance voting power your receive. This translates to voting on proposals, new asset listings, and upgrades to the Dolomite Margin protocol.&#x20;

### Other Benefits

Beyond these carefully laid out benefits, Dolomite has, and will — continue to distribute various benefits:

* Better terms for partnered liquidity programs *(i.e. the previous oARB Program)*
* Exclusive access to higher level channels on Discord.
* NFT whitelist spots we receive from partners.
* Early access to new features.

{% hint style="info" %}
Make sure to join and stay present within the Dolomite Discord to fully capitalize on all these benefits!

1. Ensure that you've connected your Discord account on Galxe
2. Join the Dolomite Discord → [Dolomite Discord Invite](https://discord.com/invite/dolomite)
3. Type "!verify" in the `#bot-commands` channel.
4. Connect with Galxe, obtain your associated Level role.
   {% endhint %}


# Dolomite Balances

Your Dolomite Balance is the virtual liquidity you own in the protocol that can be used across all of Dolomite's services.

All assets you deposit into Dolomite aggregate into your `Dolomite Balance`. Your `Dolomite Balance` can be used across all of the features on Dolomite which range from trading, borrowing, and pooling. In the image below of the `Balances` page, third column titled "Dolomite Balance" displays your `Dolomite Balance`. for each asset. To the right of your `Dolomite Balance` is your wallet balance. To move assets from your wallet to your `Dolomite Balance` you will need to deposit to Dolomite, which can be done using the plus and minus signs shown on each asset row.

<figure><img src="/files/7oFrieZ9hjoFxigSmAu0" alt=""><figcaption></figcaption></figure>

We consider this liquidity to be virtual because the actions you perform from within Dolomite do not materialize any token transfers on-chain. Rather, they result in internal ledger changes for the `DolomiteMargin` core smart contract. This increases the capital efficiency of the protocol immensely, because over time users will be able to trade with each other and not just borrow/lend to each other, without their assets ever leaving the platform.

The virtual liquidity model also enables unique offerings for assets that pass along rewards or have important native functionalities (like on-chain voting). For example, you can use your `GLP` to vest `esGMX` into `GMX` while borrowing against your `GLP` to run another strategy! The point being demonstrated is `DolomiteMargin` does not care what you do with an [Isolation Mode](/risk-management#isolation-mode) asset if you convert then tokens into a staked, vested, or other ecosystem-specific counterpart. You could have 100 `GLP` tokens deposited, have all 100 being used for vesting `esGMX` into `GMX` and  at the same time use 50 of those tokens as collateral for a borrow position and keep the other 50 idle in your `Dolomite Balance`. The choice and flexibility is up to you!


# Guide

Getting started using Dolomite's Interface.

## **Adding a wallet** <a href="#adding-a-wallet" id="adding-a-wallet"></a>

If you do not have a wallet yet, you can use MetaMask: <https://metamask.io/download.html>​

## **Connecting your wallet** <a href="#connecting-your-wallet" id="connecting-your-wallet"></a>

After you have a wallet, you can connect your wallet by pressing the `Connect Wallet` button on the top right corner of any page on Dolomite's interface: <https://app.dolomite.io>

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

After connecting, if you see the button changes to red and says `Wrong Network` (shown below), you'll need to click on the button and follow the prompts to add the Arbitrum network to your wallet.&#x20;

Alternatively, you can manually add the Arbitrum network: <https://arbitrum.io/bridge-tutorial/>.

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

## Backup RPC URLs <a href="#backup-rpc-urls" id="backup-rpc-urls"></a>

Since Dolomite is a decentralized money market protocol, querying of data and the submission of transactions go through an RPC URL.

There may be times when the RPC URL is not as responsive as it should be, during these times you may notice data being slow to load or not loading on your page. It is also possible to hit the rate limit with the public Arbitrum RPC URL (<https://arb1.arbitrum.io/rpc>), which would result in a `429` error code.

To continue using the exchange during these times you can use a backup Arbitrum URL (or other networks Dolomite may support in the future) from [Alchemy](https://www.alchemy.com/), [Ankr](https://www.ankr.com/protocol/public/) or [QuickNode](https://www.quicknode.com/chains/arb), switch the RPC URL in the network settings of your wallet and the page should load faster after. For a list of RPC URLs and their statuses: <https://chainlist.org/>.

### Steps to change the RPC URL in MetaMask on Desktop <a href="#steps-to-change-the-rpc-url-in-metamask" id="steps-to-change-the-rpc-url-in-metamask"></a>

* Click on the MetaMask icon in your browser toolbar
* Click on the three dot icon
* Click on `Expand View`
* Click on your account icon on the top right and select `Settings`
* Click on `Networks`
* Paste in the new RPC URL
* Click `Save`

## **Sending tokens** <a href="#sending-tokens" id="sending-tokens"></a>

You will need to have ETH in your Arbitrum wallet to start trading.

If you have ETH on other networks you can transfer ETH to Arbitrum using the [Arbitrum Bridge](https://bridge.arbitrum.io/). The transfer will take a few minutes. You will also be able to transfer out within a few minutes as well if you use any of the below options:

* [Across](https://across.to/)​
* ​[Hop.Exchange](https://app.hop.exchange/send?token=USDC\&sourceNetwork=ethereum\&destNetwork=arbitrum)​
* ​[Synapse](https://synapseprotocol.com/?inputCurrency=ETH\&outputCurrency=ETH\&outputChain=42161)

For more information on bridging, we recommend reading the [Arbitrum Bridge Tutorial](https://arbitrum.io/bridge-tutorial/).​


# Depositing to Dolomite

To start enjoying Dolomite features, follow these steps to deposit assets into your Dolomite balance:

### Step 1: Accessing the Balance Page

Use this [link](/dolomite-balances) to directly access the Balances page. You can also always reach the Balances page by selecting the "Balances" tab on the top left of the web app.

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

### Step 2: Choose the Asset to Deposit

To select your preferred asset for deposit, locate the plus icon *(i.e ⊕)*, to the right of your desired asset and the **In Wallet** column.&#x20;

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

### Step 3: Enter Deposit Amount and Initiate Deposit

Enter the amount you'd like to deposit or use the "max" button to use your full wallet balance of that asset. Once the desired amount is entered, click the "Deposit" button. Note that for assets other than ETH, unlocking is required prior to depositing.&#x20;

{% hint style="info" %}
Ensure that you have enough ETH to pay the gas fee for the deposit.
{% endhint %}

<figure><img src="/files/GQ6H8USIzrRJ0y3kPlO6" alt="" width="375"><figcaption></figcaption></figure>

### Step 4: Complete Deposit

Confirm the transaction within your connected wallet (MetaMask, WalletConnect, etc.) to complete the deposit. After your deposit is successfully confirmed, the asset will be displayed in your Dolomite Balance. Kindly note that there may be a slight delay of a few seconds before the deposit is fully reflected in your Dolomite Balance.

{% hint style="info" %}
The amount displayed at the top right of the Navigation bar shows the amount of ETH that you have in your wallet while your Dolomite Balance is displayed at the center of the main panel
{% endhint %}


# Withdrawing from Dolomite

Follow the steps below to withdraw your assets from Dolomite:

### Step 1 : Accessing the Balance Page

You can directly access the Balances page using this [link](https://app.dolomite.io/balances). Alternatively, you can always reach the Balances page by clicking the "Balances" tab located on the navbar at the top left of the web app.

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

### Step 2: Choose the Asset to Withdraw

To select your preferred asset for deposit, locate the minus icon *(i.e* ⊖*)*, to the right of your desired asset and the **In Wallet** column.&#x20;

<figure><img src="/files/6omWLWOHfTCDFeaKi9aP" alt=""><figcaption></figcaption></figure>

### Step 4: Enter Withdrawal Amount and Initiate Withdraw

Enter the desired withdrawal amount or click the "max" button to withdraw the full balance of the asset in your Dolomite Balance. After specifying the amount, initiate the withdrawal by clicking the "Withdraw" button.

{% hint style="info" %}
Ensure that you have enough ETH in your wallet to cover the gas fee to complete withdrawal
{% endhint %}

### Step 5: Complete Withdrawal

Confirm the transaction within your connected wallet (MetaMask, WalletConnect, etc.) to complete the transaction.

{% hint style="warning" %}
If the full supply on Dolomite of an asset you are looking to withdraw is actively being lent out, you won't be able to withdraw. However you still have a couple of options. You can wait, and considering the APR will be 100% for the asset it's very likely that new depositors will come in soon to add more liquidity for that asset. Alternatively can use that asset as collateral to borrow another asset, which you can then withdraw. You'll continue to earn 100% APR on your collateral until depositors add more of that asset.
{% endhint %}


# Borrow

The borrow page allows you to borrow various assets using assets from your Dolomite balance as collateral.

Borrowing is one of the core features offered on Dolomite. Borrowing enables you to free up capital without needing to sell your holdings, perform more complex strategies of looping and hedging, and maximize the use you get out of your assets.

{% hint style="info" %}
If you'd like to skip to our guide on how to open and manage a borrow position, scroll down to [Opening a Borrow Position](#opening-a-borrow-position)
{% endhint %}

If you're familiar with borrowing on protocols like Aave, there are two key aspects of Dolomite borrowing that are different:

* Aave and similar protocols work directly from your wallet. Anything you deposit to Aave acts as collateral, and anything borrowed goes into your wallet. Dolomite works differently. Assets deposited to Dolomite are not by default used as collateral, just added to your [Dolomite Balance](/dolomite-balances) for use anywhere on Dolomite. To use those assets as collateral, they must be added to a `Borrow Position` (more info on that below).
* All collateral and borrowing on Aave and similar protocols is done in one pool, tied to your wallet. All your borrowing is done using all your collateral. On Dolomite, you can have many *isolated* `Borrow Positions`, comparable to having multiple different wallets each using Aave independently. This allows you to hold riskier borrows separate from more stable ones, and in the case of liquidation only one borrow position is liquidated while the others remain open.

## How does borrowing work?

### **Collateral**

At a high level, borrowing is performed by putting up **collateral** for a loan, and then assets are borrowed against that collateral. Your collateral is used to ensure lenders get repaid in the case that a loan isn't repaid. So if you borrow $100 of ETH, there needs to be enough collateral supplied so that lenders can always be repaid that $100 of ETH.

### **Liquidation**

Liquidation is what occurs when the value of your collateral becomes too low compared to the amount borrowed. Generally this will happen when the value of your collateral drops too low, or the value of the assets borrowed gets too high.

So for example, if you supply $100 of USDC as collateral and borrow $60 of ETH, your position is well collateralized. But if the price of ETH were to double, the value of what you owe would be $120, meaning that your $100 of collateral would be insufficient to repay lenders. That is why the position would be liquidated before reaching that point, converting your USDC to ETH and repaying the ETH lenders that supplied your borrowing. That liquidation occurs when your `Health Factor` drops below 1.

You can read more on liquidation on the [Risk Mitigation](/risk-management#liquidations) documentation page.

### **Health Factor**

Your health factor is a representation of how much collateral you have compared to how much you are borrowing. This takes into account a buffer called a `liquidation threshold` to make sure that lenders can be repaid even in turbulent market conditions.

So for example if you have $100 of USDC as collateral and are borrowing ETH, the liquidation won't occur when the ETH is also worth $100, since converting your USDC to ETH in order to repay lenders may result in getting less than $100, leaving lenders without reimbursement. Each asset has a different liquidation threshold based on the risk associated with liquidating that asset.

You can read more about the `Health Factor` on the [Risk Mitigation](/risk-management#health-factor) documentation page.

### **Borrow Position**

Each of these above elements applies independently to each `Borrow Position` you hold. Each `Borrow Position` is independently collateralized and liquidated, allowing you to hold riskier positions that don't affect safer positions. `Borrow Positions` are also distinct from your [Dolomite Balance](/dolomite-balances), meaning liquidations don't affect assets that are deposited onto Dolomite that you haven't elected to use as collateral.

Each `Borrow Position` can have up to 32 different assets used across what is supplied as collateral and what is borrowed.

## Exploring the Borrow Page

<figure><img src="/files/gMhyDeoM8YjIkJcDJs9k" alt=""><figcaption><p>The borrow page with no positions open</p></figcaption></figure>

The borrow page shows a wide range of information that is relevant to borrowing. Let's break it down so you know what you're looking at.

### Dolomite Balances

<figure><img src="/files/tLSZHEmSB6iZUWp8KUmM" alt="" width="437"><figcaption></figcaption></figure>

On the left side of the page you will find your Dolomite Balances. This displays the assets you currently have deposited to Dolomite and available for use. If you don't see a balance shown here, make sure that you've first deposited your assets onto Dolomite from your wallet on the [Balances Page](/guide/depositing-to-dolomite). The balances displayed here can be added to a `Borrow Position` to be used as collateral, and when you borrow assets they will be added to the balances displayed here. If you only want to only see asset balances greater than zero, click the "Hide Zero Balances" checkbox below the `Zap` feature.&#x20;

{% hint style="info" %}
Use the "**Swap** ⚡" `Zap` feature in this section to quickly swap one asset to another within your Dolomite Balance.&#x20;

See more about this `Zap` feature: [**Zap Swap Panel**](https://docs.dolomite.io/guide/zap#zap-swap-panel)
{% endhint %}

### Borrow Summary

<figure><img src="/files/lnYhBMOnisD3tEMnhifl" alt="" width="375"><figcaption></figcaption></figure>

At the top center of the page you'll find a summary of all your borrow positions. This gives a sum of the amount borrowed across all borrow positions, a sum of the amount borrowed across all borrow positions, and what APR you are currently earning, paying, and the net between those. The APR shown is relative to your collateral amount.

### Asset Information

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

On the right side of the page you'll find a panel that displays borrowing and lending information about each of the available assets on Dolomite. Shown for each asset row is the APR earned for supplying that asset (by default earned by any user with that asset deposited on Dolomite) as well as the APR paid when borrowing that asset.

Supply APR highlighted in blue signifies the asset has additional APR derived either from an outside source, or an incentivization program on Dolomite. Hovering over the blue APR will display more information on where the yield is derived from.

Certain assets [Isolation Mode assets](/risk-management#isolation-mode) on Dolomite are not available for borrowing, and are displayed with the text "Collateral Only". Those assets generally earn some form of yield from outside of Dolomite, and more information about that can be found on the Balances page or in our [Integrations](/integrations) documentation.

To see more information about borrowing any of the listed assets, click on the row to expand it.

<figure><img src="/files/9mNk4L2JocNzhEchhin4" alt="" width="317"><figcaption></figcaption></figure>

Once expanded you will see additional information about the asset.

**Total Supplied** - This is the amount being supplied on Dolomite for the selected asset. This supply is a summation of all deposits on Dolomite for that asset.

**Total Borrowed** - This is the amount of that asset being borrowed across all borrow positions from all users.&#x20;

**Utilization Rate** - This represents the percent of the total supply that is currently being borrowed. The ratio of the amount borrowed to the amount supplied is what determines the APR for borrowing and supplying the asset.

**Oracle Price** - Dolomite's borrowing capabilities are made more secure by using an "Oracle Price" to value each asset. This price is supplied by Chainlink and is based on the price the asset is being traded at across many different exchanges and protocols, providing a volatility-resistant metric for the value of the asset.

**Liquidation Threshold** - This is the maximum amount relative to your collateral that can be borrowed before being liquidated. So in the image above the liquidation threshold for ETH is 86.96%, meaning that with $100 of USDC collateral, you cannot borrow more than $86.96 worth of ETH. Beyond that the `Health Factor` drops below 1 and the position will be liquidated.

**Liquidation Penalty** - When the position is liquidated, enough of the collateral is sold to repay lenders, plus the liquidation penalty which is paid out to the protocol to disincentivize lqiuidations. You can read more on liquidation penalties on the [Risk Mitigation](/risk-management#liquidation-penalties) documentation page.

### Open a Borrow Position Button

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

At the center of the page you'll see a big button labeled `Open New Borrow Position`. If you'd like to borrow on Dolomite, this is where your journey begins. See below for full information on how to borrow.

## Opening a Borrow Position

Before beginning, make sure you've deposited your assets onto Dolomite. You can review our [Depositing to Dolomite](/guide/depositing-to-dolomite) guide for help if needed. Once you see your deposited assets reflected in your [Dolomite Balance](/dolomite-balances) on the Balances page, you're ready to borrow.

### 1. Navigate to the Borrow page

Click the `Borrow` tab on the navbar on the top left of the Dolomite web app to navigate to the Borrow page. If on mobile, tap the menu in the upper right of the screen to expand it, and then tap `Borrow` to navigate to the Borrow page. You can also reach the Borrow page here: <https://app.dolomite.io/borrow>

### 2. Click the Open New Borrow Position Button

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

In the center of the page you will see a big button that says `Open New Borrow Position`. Clicking this will expand it to display an input field and asset selector.

### 3. Select Your Collateral Asset and Enter an Amount

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

Once expanded, you will see a few pieces of information displayed and be able to add collateral to a new Borrow Position. Begin by using the asset selector to select the asset you would like to use as collateral. The asset selector can be found on the right side of the input field, above the `Add` button and below the `Max` button. In the image above ARB is currently selected.

Once you have selected the asset you would like to use as collateral, enter into the input field the amount of that asset that you would like to use as collateral. Keep in mind that the amount you will be able to borrow is determined by the amount you use as collateral. You can see above the input field the amount of the selected asset you have available for use, where it says "Dolomite Balance".

Once you have entered an amount, you will see the value reflected below next to the `Add` button, which will become active as long as you have enough available balance to add that amount in collateral.

Click `Add` and confirm the transaction in your wallet to create a new borrow position and add the entered amount of the selected asset as collateral.

{% hint style="info" %}
Note that if you would like to add any [Isolation Mode](/risk-management#isolation-mode) assets as collateral, they **must** be selected at this step. Isolation Mode assets are displayed in the asset selector with a shield icon <img src="/files/a2Jcimvz8oeWDP022a1s" alt="" data-size="line"> next to their name. So for example if you would like to use GLP collateral for a position, it must be selected during this step. If you open the position with USDC (or any other asset) as collateral, you will be unable to deposit GLP collateral to that borrow position later on.

{% endhint %}

{% hint style="info" %}
Use the **⚡ Zap - Trade before adding** `Zap` feature in this section to trade an asset in your Dolomite Balance to another asset before opening a Borrow Position with it as collateral.

See more about this `Zap` feature: [**Zap To Open / Trade Before Adding**](https://docs.dolomite.io/guide/zap#zap-to-open-trade-before-adding)
{% endhint %}

### 4. Review Opened Borrow Position

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

Shortly after confirming the transaction in your wallet to open your borrow position, you should see your new borrow position appear above the `Open New Borrow Position` button. In the image above you can see a position with about $9 of collateral added. New borrow positions don't start with anything borrowed yet, so the `Health Factor` is displayed as infinite.

Click on the borrow position to expand it.

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

After expanding the borrow position, more information is presented. You can see the net interest on the position as well as the exact balances of any assets borrowed or supplied as collateral. You are also now presented with two buttons, `Manage Collateral` and `Manage Loan`.

If you have no assets borrowed, an indicator will be display <img src="/files/RxcdNKq6mn58EB6lxEGr" alt="" data-size="line">

### 5. Managing Collateral

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

Under your Collateral three additional tabs will be displayed - `Add`, `Remove`, and `Swap` - as well as an input field. This is where you can manage the collateral of the borrow position if you wish.

You can add additional collateral to the position, which will allow you to borrow more or improve your position's health. When adding collateral, it can be any of the assets shown in the asset selector, displayed at the right side of the input field.

You can also remove collateral, returning it to your Dolomite Balance. When removing collateral, you will be able to select any of the assets you currently are using as collateral.

Within the `Swap` tab, you are able to seamlessly trade one collateral asset to another asset, and keep it as collateral, even while actively borrowing against that collateral, regardless of how complicated the Borrow Position may be. Read more about this in the `Zap` guide section, [Trade into Different Collateral](https://docs.dolomite.io/guide/zap#trade-into-different-collateral).

{% hint style="info" %}
Use the **⚡ Zap - Trade before Adding** `Zap` feature within the **`Add`** to trade an applicable asset from your Dolomite Balance, convert it to the desired asset, then add that desired asset as collateral within the Borrow Position.

See more about this `Zap` feature: [**Trade Before Adding**](https://docs.dolomite.io/guide/zap#trade-before-adding)
{% endhint %}

### 6. Managing Borrowed Assets

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

Under your Borrowed assets three additional tabs will be displayed - `Borrow`, `Repay`, and `Swap` - as well as an input field. This is where you can manage the assets that are being borrowed in this borrow position. Proceed to the next step to learn more about borrowing.

Within the `Swap` tab, you are able to swap debt assets. It first borrows your desired asset, swaps it to an asset that is currently being borrowed, and repays that debt. Read more about this in the `Zap` guide section, [**Borrow, Swap and Repay Debt**](https://docs.dolomite.io/guide/zap#borrow-swap-and-repay-debt).&#x20;

### 7. Borrow

To begin borrowing, select the asset you would like to borrow from the asset selector to the right of the input field. In the image shown in the step above it is currently displaying ETH. Once you have selected the asset you would like to borrow, the current amount of the asset being borrowed will be displayed where it says `Position Debt`. This will display 0 if nothing is yet borrowed. Your Dolomite Balance of the selected asset will also be displayed where it says "Dolomite Balance".

When you have selected your asset, input the amount you would like to borrow.

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

After you have entered an amount, you will see that new information is displayed. You will see how your position debt changes, increasing by the amount being borrowed. You will also see how your Dolomite Balance will change, increasing by the amount being borrowed. And lastly you will see how the borrow position's position health will change as a result of borrowing. The more you borrow, the lower your position health. Be careful to keep your position health safely above 1 by assuring that there is more than enough collateral for the amount being borrowed.

If you are satisfied with the information displayed, click `Borrow` to borrow the entered amount of the selected asset, and confirm the transaction in your wallet. Once the transaction is confirmed, the borrowed assets will be added to your Dolomite Balance.

{% hint style="info" %}
Use the **⚡ Trade and Deposit as Collateral** `Zap` feature within the **`Borrow`** tab to easily increase your exposure to an asset or perhaps employ a strategy such as looping or hedging.

See more about this `Zap` feature: [**Trade and Deposit as Collateral**](https://docs.dolomite.io/guide/zap#trade-and-deposit-as-collateral)
{% endhint %}

### 8. Review Updated Position

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

Shortly after confirming the transaction, the amount borrowed will be added to your Dolomite Balance and the debt owed on the Borrow Position will be displayed on the right side of the Borrow Position. If you used the `Zap - Trade and Deposit as Collateral` option, the borrowed amount will be deposited directly into the Borrow Position instead of your Dolomite Balance.

🎉 With that, you've successfully opened a Borrow Position on Dolomite! You can continue to modify the position, borrowing more, repaying the loan, adding collateral, or removing collateral. To fully close out a position, follow the guide below.

## Close a Borrow Position

To close a borrow position you must first repay any debts, then you can withdraw your collateral from the position.

### 1. Repay Loan

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

The first step of closing out your Borrow Position is to repay all debts. Click the `Repay` tab, below  your borrowed asset(s).

Once you have properly navigated to the `Repay` tab of the Borrow position, use the asset selector on the right side of the input field to select the asset you would like to repay. In the image above, USDC is selected as that is the only asset being borrowed.

To fully repay the debt owed, click the `Max` button displayed above the asset selector. This will auto-populate the input field with the full amount owed, and will make sure that it accounts for any "dust" (small fractions of an asset) as well.

In the image above you can see that additional information is displayed about what will happen after the transaction is complete. The position debt goes from 3 to 0, the amount owed is withdrawn from the Dolomite Balance, and the Position Health goes to infinity since there is no debt left.

Once you have reviewed the information, click the `Repay` button and confirm the transaction in your wallet to repay the debt.

After the debt is repaid, you will see that no assets are owed on the position:

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

{% hint style="info" %}
Please note that you will need to select the amount of your collateral that you would like to trade into the asset you owe, you cannot set an exact amount that you would like to receive from the zap trade due to fluctuations that can occur in the price. To be sure your loan is paid off, it is recommended that you zap more than the amount owed.

For example, if you have $200 of USDC collateral and owe $100 of ETH, it is recommended that you zap over $100 of USDC to be sure the loan is paid off. Any excess ETH left after repaying the loan will be added to the collateral of the borrow position.
{% endhint %}

{% hint style="info" %}
Use the **⚡ Use Collateral to Repay** `Zap` feature within the **`Repay`** tab to repay your debt using the position's collateral, meaning no external assets are needed to close a position.

See more about this `Zap` feature: [**Use Collateral to Repay**](https://docs.dolomite.io/guide/zap#use-collateral-to-repay)
{% endhint %}

### 2. Withdraw Collateral

Once you have no remaining debts on the Borrow Position, you are free to withdraw all your collateral back to your Dolomite Balance.

Select the `Remove` tab, below your collateral.&#x20;

<figure><img src="/files/7cD7q3pG9Bhtzd2KsxP6" alt=""><figcaption></figcaption></figure>

If you have only one asset used as collateral, the asset selector will have that asset preselected. If you have multiple assets used as collateral you can use the asset selector to the right of the input field to select which asset you would like to remove from the borrow position.

To remove all your collateral and close the Borrow Position, click the `Max` button above the asset selector. This will auto-populate the input field with the total amount of collateral you have for that asset, and will include any "dust" (small fractions of an asset) that has accumulated from interest.

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

After clicking `Max` you will see new information displayed. In the above image you can see that the position collateral will decrease from 5 ARB to 0, that the Dolomite Balance will increase by 5 ARB, and you can see that the `Remove` button text has changed to `Close Borrow`. Because this is the last of the collateral in the position, removing it closes the Borrow Position and returns the collateral to the Dolomite Balance.

Once you have reviewed the information, click `Close Borrow` and confirm the transaction in your wallet to close out the borrow position.

Shortly after confirming, the Borrow Position will no longer be displayed on the Borrow page and the collateral you removed will be returned to your Dolomite Balance.

{% hint style="info" %}
Use the **⚡ Trade after removing** `Zap` feature within the **`Remove`** tab provides a simple and compact way to remove collateral from a Borrow Position and trade it to your desired asset, before moving it to your Dolomite Balance.

See more about this `Zap` feature: [**Trade after Removing**](https://docs.dolomite.io/guide/zap#trade-after-removing)
{% endhint %}

***

🎉 Congratulations, you have successfully closed your Borrow Position! To review past Borrow Positions, click on the History tab on the navbar, and once you arrive on the History page select the "Borrows" tab on the page to see all your past Borrow Positions.


# Strategies

The Strategies page allows you to engage in curated borrowing strategies to maximize value-accrual on Dolomite.

Dolomite Strategies are prebuilt positions that you can create with just a deposit and a click. These strategies are designed to help you maximize the yield that you earn, rewards you earn, price exposure you have to an asset, or some combination thereof. For newer users, this greatly simplifies the process of creating your own strategy from scratch using a Borrow Position.

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

## Exploring the Strategies Page

To begin, locate the **Strategies** page on the navbar, or by going directly to the page using the following link: [https://app.dolomite.io/](https://app.dolomite.io/borrow)[strategies](https://app.dolomite.io/strategies). On this page, you'll be greeted with a few core modules:

* **Dolomite Balances**\
  Displays all the assets in your Dolomite Balance available to utilize. To modify your Balance, you can swap between assets, or deposit or withdraw funds.
* **Active Strategies**\
  All the Strategies on the current chain that you are you have actively deployed. Click the **Manage** button on an active Strategy to claim any addition rewards or to close the position.
* **Browse Strategies**\
  Available strategies to use on all chains. Provides you with many ways to filter strategies, such as highest APR, risk factor, and chains.&#x20;
* **Filters**\
  Tags to filter the Strategies by — ideally used to find your perfect Strategy.

## Finding Your Strategy

Each strategy may provide a wide variety of rewards, asset exposure, leverage, or more. So in order to find a Strategy that matches your interests, we recommend using both the Browse filters and Strategy tags.

### Using Tags and Filters

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

If you perhaps want to filter the strategies in a more general manner, browse filters are available. The browse filters provide you with three main methods to sort all the available strategies:

&#x20;                          → **APR** - *Sort by highest or lowest APR provided inherently by the Strategy.*\
&#x20;                          → **Risk** - *Sort by the three broad levels of Strategy risk - low, medium, high.*\
&#x20;                          → **Chains** - *Sort by specific chains, current chain, or all chains.*&#x20;

{% hint style="warning" %}
The risk attributed to a strategy incorporates aspects such as leverage, price correlation between collateral and debt, and price exposure, among others. It is meant as a broad, but not comprehensive, indicator of possible risk. No strategy is without risk. Ensure that you understand the risks involved before utilizing a strategy.
{% endhint %}

To go above and beyond finding your perfect strategy, select **Tags** available on the Filters module. Tags are also listed on each strategy.

<figure><img src="/files/GFdeaF8muRS6lNn4vghd" alt=""><figcaption><p><strong>Filters</strong> module</p></figcaption></figure>

{% hint style="info" %}
Hover over each **Tag** for a brief description of what it represents.
{% endhint %}

Tags are depicted with two distinct categories — **Strategy Type** and **Reward Type**. The Strategy Type tags are meant to give users an understanding of what methods the strategy employs, or what leverage is used. Reward Type tags represent that a Strategy is earning a specific reward, or has a specific yield source.&#x20;

### Strategy Cards

After you have filtered to find a set of strategies that fits your preferences, you can pick the best Strategy for you. Each strategy card displayed in the **Browse Strategies** section is equipped with general information all about it. The diagram below presents a breakdown of each label a strategy has.

<figure><img src="/files/oKbiB4aHUX9umGBOEAH8" alt="" width="563"><figcaption></figcaption></figure>

In general, the risk meter will provide you with a guide of how inherently "risky" a Strategy is. You can hover your mouse over the risk meter to see further information on the risk of the strategy. As its simply a estimated metric, it is advisable to do your own research on the risk brought in by the assets, protocols in use, leverage used, and other associated risk.

## Creating a Strategy Position

Once you've decided on your Strategy, click the grey `Create Position` button. This will bring you to a more comprehensive Strategy panel. The left side will provide you with a full breakdown of the APR provided from the Strategy, along with a few brief descriptions of how it works and risks involved.&#x20;

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

The right side's *Deposit Amount* section allows you to enter an amount from your [Dolomite Balance](/dolomite-balances) you wish to utilize with this Strategy. After an amount is entered, the New Position section displays a preview of the future position, the yield that it will be earning after creation, and transaction details. Feel free to use the toggles to display the yield in different styles.

Once you have reviewed everything, clicking the green **Create Position** button will initiate the transactions in your wallet. After a successful transaction, you will see your Strategy displayed in the *Active Strategies* section, and will begin earning!

{% hint style="info" %}
While the Strategy page provides users with a brief overview of the components of a strategy, it is recommended that users conduct their own research to gain a full understanding of assets, risks, and volatilities.
{% endhint %}

## Managing Active Strategies

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

All currently active strategy positions created are displayed at the top of the Strategy page under **Active Strategies**, which will display relevant position information such as current yield, position equity, and position health.&#x20;

Clicking the grey Manage button will pop up a panel to observe the strategies performance, claim available rewards, and the option to close the Strategy position.&#x20;

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

The left side will provide you with the entire breakdown of the APR provided from the Strategy, along with a few brief descriptions of how it works and risks involved.&#x20;

On the right side of the Strategy position, a complete breakdown of rewards earned is provided, along with other relevant information. For rewards that need to be claimed, click the **claim** button, which will link you to where it can be claimed (either native to Dolomite or third-party). Abstract rewards that have no claim button are typically credited inherently to the wallet that owns the Dolomite account (i.e. points).&#x20;

<figure><img src="/files/aAzasGLXIMGC9HrWA3SB" alt="" width="324"><figcaption><p>Populated after clicking <strong>Close Strategy And Withdraw</strong></p></figcaption></figure>

Close the Strategy position by clicking the **Close Strategy And Withdraw** button, which will populate a transaction estimate and route below. After clicking **Confirm Close** to initiate the transaction in your wallet, the Strategy position equity will be added to your Dolomite Balance. With a successful transaction, the position will be removed from the Active Strategies module.

{% hint style="warning" %}
When a strategy is closed, it overpays your debt slightly to ensure the full debt is paid. As a result, when a strategy is closed you will receive two assets to your Dolomite Balance - your collateral asset will be the bulk of what goes to your Dolomite Balance, but you will additionally receive some of the debt asset in the strategy.
{% endhint %}

{% hint style="success" %}
Want to display or share your Strategy position with others? Simply click the "SHARE" button at the top of an Active Strategy to modify and generate a savable image of your Strategy position!
{% endhint %}


# Zap

A Dolomite feature for user ease and Borrow Position flexability.

The `Zap` feature is a versatile tool allowing users to swap between assets on Dolomite using DEX aggregators (i.e. Paraswap or Odos) and direct protocol integrations, all within a user's Dolomite Balance or Borrow Position. This means users no longer need to swap assets before depositing onto Dolomite, all while obtaining the best price on the market.

Because of Dolomite's combination of protocol integrations and integrations with DEX aggregators, users can even swap into assets not available on exchanges, such as GLP.

Beyond simply trading assets within Dolomite, `Zap` is also uniquely integrated within Borrow Positions to provide users with a wide range of `Zap` options to build their ideal Borrow Position, or internally change it with one-click.&#x20;

At a glance, here are the general possibilities `Zap` provides:

*On Dolomite*–

* `Zap` panel to trade assets from your Dolomite Balance
* Trade an asset to a different asset to open a Borrow Position

*Within Borrow Positions*–

* Borrow one asset, then have it traded to another asset and added as collateral, all within the same transaction (i.e. Looping or hedging)
* Repay your loan using your collateral
* Deposit collateral in the form of an asset you don’t hold
* Withdraw collateral to a different asset
* Swap one collateral asset into another
* Swap one debt asset into another

The following sections will provide a higher level of detail on each of the `Zap` types.

### ⚡ Zap Swap Panel

<figure><img src="/files/XOcC4rkLIvc7nka0dFOg" alt="" width="413"><figcaption></figcaption></figure>

The Zap Swap Panel simply swaps one asset to another within your Dolomite Balance. The main use of this tool is a swapping mechanism between any of the Dolomite integrated assets. This means you can increase your exposure to any of those assets, while also taking advantage of Dolomite's APR (derived from Supply APR or Incentives), along with any inherent APR an asset may have.

Zapping makes it easier to acquire assets that would have otherwise required you to withdraw and go to another project's dApp, and thanks to the routing that is performed by DEX aggregators, you can swap into project-specific assets using otherwise unsupported assets (such as swapping ARB into GLP, when usually one would have to first acquire one of the component assets of GLP).

#### Location:

1. [**Balances Page**](https://app.dolomite.io/balances)

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

1. [**Pool Page**](https://app.dolomite.io/pool/ETH/USDC.e)

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

3. [**Borrow Page**](https://app.dolomite.io/borrow)

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

### ⚡ Zap To Open / Trade Before Adding *\[Currently Disabled]*

This `Zap` option lets you trade an asset in your Dolomite Balance to another asset before opening a `Borrow Position` with it as collateral. Of course, the action is similar to using the Zap Swap Panel then opening a `Borrow Position` with your desired asset, however the main purpose of Zap To Open is user ease. The following section will provide you with the Location of this option, along with the steps to execute Zap To Open.&#x20;

#### Location:

1. [**Borrow Page**](https://app.dolomite.io/borrow)

<figure><img src="/files/hKNIzdWMP8eUyfnsv0uw" alt="" width="563"><figcaption></figcaption></figure>

#### Guide:

To find Zap to Open / Trade Before Adding, navigate to the Borrow Page, locate the "⊕ Open New Borrow Position" panel, then click "⚡ Zap - Trade before adding." Once you see two sides of the `Zap` trade appear, you can select your desired assets for the trade. The top input box is the asset from your Dolomite Balance that you will trade for your future collateral in the position. Change this asset using the asset selector to the right of the input box. You can use the `Max` button above the asset selector to add all of that asset from your Balance into the Zap trade.&#x20;

<figure><img src="/files/BCxGiEhPT3Wvlst6gGD2" alt="" width="563"><figcaption><p>Example: Trading USDC to jUSDC to open a Borrow Position</p></figcaption></figure>

The second box is the amount of the asset that will be traded to, then added to the new `Borrow Position` as collateral. Similar to the input box above, you can change the asset that will be collateral via the asset selector to the right of the second box.&#x20;

Take a moment to review the Zap To Open / Trade Before Adding. Hovering over the `?` icons will provide information on each of the components of this `Zap`. When you believe everything is correct, click the green "⚡ ZAP" button to begin executing the necessary transactions to complete the `Zap` trade and open the borrow position. &#x20;

<figure><img src="/files/c9EwMmB35l61bIJhZV4Q" alt="" width="563"><figcaption><p>As it's the example wallets first time using jUSDC on Dolomite, it will need to create a Vault.</p></figcaption></figure>

The steps to execute a `Zap` trade, as demonstrated in the image above, will look different depending on the asset. After the `Zap` is completed successfully, you should see a new `Borrow Position` at the top of your `Borrow Position` stack, with your desired asset as collateral.&#x20;

{% hint style="info" %}
As Zap trades require multiple steps to execute on the blockchain, the transaction costs will be greater than simply opening a borrow position using assets you already hold.
{% endhint %}

### ⚡ Trade Before Adding

Similar to Zap To Open, this `Zap` option will take an applicable asset from your Dolomite Balance, convert it to the desired asset, then add that desired asset as collateral within the `Borrow Position`.&#x20;

#### Location

1. [**Borrow Page**](https://app.dolomite.io/borrow) **→ Borrow Position -> Add**

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

#### Guide

Navigate to this `Zap` option within a `Borrow Position` by clicking the `Add` tab. Next, click on the  "⚡ Zap - Trade before adding" checkbox below the input box. Once you see two sides of the `Zap` trade appear, you can select your desired assets for the trade. The top input box is the asset from your Dolomite Balance, and the bottom input box is the asset you want to add as collateral to your `Borrow Position`. Change these assets using the asset selector to the right of the input boxes. You can use the `Max` button above the asset selector to add all of that asset from your Balance into the `Zap` trade.&#x20;

<figure><img src="/files/oQZdv7Z8u6zLxcbMyhUe" alt="" width="527"><figcaption><p>Example: Trading LINK to USDC.e to add as collateral</p></figcaption></figure>

Hovering over the `?` icons will provide information on each of the components of this `Zap`. You can observe the future changes of your Dolomite Balance above the first input box, and the changes in the `Borrow Position`'s collateral above the second input box. When you believe everything is correct, click the green "⚡ ZAP" button to begin executing the necessary transactions to complete the `Zap` trade. After successful transactions, you should see the collateral added to the top left of the `Borrow Position`.&#x20;

{% hint style="info" %}
As `Zap` trades require multiple steps to execute on the blockchain, the transaction costs will be greater than simply adding collateral using an asset you already hold.&#x20;
{% endhint %}

### ⚡ Trade and Deposit as Collateral

“Zap - Trade and Deposit as Collateral” is a perfect tool if you want to increase your exposure to an asset or perhaps employ a strategy such as looping or hedging.

#### Location

1. [**Borrow Page**](https://app.dolomite.io/borrow) **→ Borrow Position -> Borrow**

<figure><img src="/files/YFmG2ACkbajVKOq87qy4" alt="" width="563"><figcaption></figcaption></figure>

#### Guide

Find this `Zap` option within an open `Borrow Position` by clicking the `Borrow` tab. Next, click on the  "⚡ Zap - Trade and deposit as collateral" checkbox below the input box. Once you see two sides of the `Zap` trade appear, you can select your desired assets for the trade using the asset selector to the right of the input boxes. In this `Zap` trade, the top input box is what you will be borrowing, while the bottom input box is what will be added as collateral within the `Borrow Position`.&#x20;

<figure><img src="/files/GiNNFp5axoQowYqXoR6D" alt="" width="527"><figcaption><p>"Before" Example: Borrowing ("shorting") LINK, looping to USDC.e</p></figcaption></figure>

For the "Trade and deposit as collateral" `Zap` option, since the borrow, trade, and add as collateral steps are done in one step, it is possible to borrow more than the value available from your collateral within the `Borrow Position`. Before you execute the `Zap`, make sure to take note of the future changes the `Zap` will have on your Position, such as changes in collateral, debt, and Health Factor. These changes can be easily noted under the second input box, and the Position Health in the top right of the section, respectively. When you believe everything is correct, click the green "⚡ ZAP" button to begin executing the necessary transactions to complete the `Zap` trade.

{% hint style="info" %}
As `Zap` trades require multiple steps to execute on the blockchain, the transaction costs will be greater than simply borrowing an asset.&#x20;
{% endhint %}

<figure><img src="/files/r9OJ6khsPXkSuVjr6VLp" alt="" width="563"><figcaption><p>"After" Example: LINK was added as debt, and USDC.e added as collateral (from the LINK -> USDC.e trade)</p></figcaption></figure>

After successful transactions, you should see an increase in collateral, an increase in debt, and perhaps changes in your Positions Health value.&#x20;

### ⚡ Use Collateral to Repay

This `Zap` option enables users to use a `Borrow Position`'s collateral to pay debt within the `Borrow Position`, removing the need to pay off a position's debt only from your Dolomite Balance. This option increases the flexibility a user has in terms of position size along with user ease.&#x20;

#### Location

1. [**Borrow Page**](https://app.dolomite.io/borrow) **→ Borrow Position -> Repay**

<figure><img src="/files/H2fGnqDnG32bLAMECe8d" alt="" width="563"><figcaption></figcaption></figure>

#### Guide

Find this `Zap` option within a `Borrow Position` by clicking the `Repay` tab. Next, click on the  "⚡ Zap - Use collateral to repay" checkbox below the input box. Once you see two sides of the `Zap` trade appear, you can select your desired assets for the trade using the asset selector to the right of the input boxes. In this `Zap` trade, the top input box is what `Borrow Position` collateral asset you will be using to repay, while the bottom input box is what `Borrow Position` debt that you will repay. If there is only one asset as collateral and one as debt within the `Borrow Position`, the assets selected will already be reflected in the `Zap`. You can use the `Max` button above the asset selector to add all of the collateral to repay the debt. Excess collateral used to repay debt will be added to the `Borrow Position` as collateral after the `Zap` trade.

{% hint style="info" %}
Because of possible fluctuations in price in the time it takes for a zap to be processed, it's recommended that at the very least you make sure you're using enough collateral that the "Minimum Received" (shown in the zap details at the bottom) is enough to pay off the amount of debt you would like to repay.
{% endhint %}

<figure><img src="/files/QGMLgsN7imeSLkjz8mKu" alt="" width="530"><figcaption><p>Example: USDC.e collateral pays off LINK debt, then remaining LINK from trade is added as Collateral</p></figcaption></figure>

Under the bottom input box, you can find exactly what the `Zap` trade will do. Once you are done reviewing your `Zap`, click the green "⚡ ZAP" button to begin executing the necessary transactions to complete the `Zap` trade. After successful transactions, you should see less debt and less collateral within your `Borrow Position`.&#x20;

{% hint style="info" %}
As `Zap` trades require multiple steps to execute on the blockchain, the transaction costs will be greater than simply repaying using assets from your Dolomite Balance.&#x20;
{% endhint %}

#### Zapping to repay when an asset is at its supply cap

Under normal operation, repaying your debt fully likely overpays your debt. If you `Zap` all your collateral to repay your debt, you'll have extra left over after the debt is paid, and even if you aim to repay the debt exactly, there will likely be some dust left over. The result is that any extra of an asset that is left over after the debt is repaid is added as collateral to your borrow position.

For example, if you have 100 DAI of debt and you aim to use `Zap` to swap just enough to pay off the debt, the `Zap` that happens when you repay may result in you getting 101.2 DAI for your traded collateral. 100 of that DAI would go towards repaying your 100 DAI in debt, but the other 1.2 DAI from your `Zap` isn't lost, it remains in the borrow position, just added as collateral. So you'll see 1.2 DAI in collateral in your borrow position along with any remaining collateral not used to pay off your debt.

**The trouble arises when your debt asset is at its supply cap**. That extra can't be added to your borrow position as collateral, because that would increase the total supply of that asset on Dolomite, which can't happen when an asset is at its cap.

The solution is to repay with an amount that falls just short of your debt. To do this, look at the output of the `Zap` when zapping to repay (the bottom field), and ensure that it's slightly less than the amount of your debt. You can see an example below:

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

Here you can see that the position debt is 4.982 USDC, and the amount in the output of the zap is 4.948815. This will ensure that there is no excess USDC that gets added as collateral.

When the asset is no longer at its supply cap on Dolomite you'll be able to repay the remaining amount, but in the meantime you'll have freed up the large majority of your assets from the borrow position.

### ⚡ Trade after Removing

Similar to Zap Trade and Deposit as Collateral, "Zap - Trade after Removing" provides a simple and compact way to remove collateral from a `Borrow Position` and trade it to your desired asset, before moving it to your Dolomite Balance.&#x20;

#### Location

1. [**Borrow Page**](https://app.dolomite.io/borrow) **→ Borrow Position -> Remove**

<figure><img src="/files/dswA0JW8Zomw5OUjjtSq" alt="" width="563"><figcaption></figcaption></figure>

#### Guide

Locate this `Zap` option within a Borrow Position by clicking the `Remove` tab. Next, click on the  "⚡ Zap - Trade after removing" checkbox below the input box. Once you see two sides of the `Zap` trade appear, you can select your desired assets for the trade using the asset selector to the right of the input boxes. The top input box is the `Borrow Position` collateral you wish to remove, while the bottom input box is the asset you will trade to, then move to your Dolomite Balance. You can use the `Max` button above the asset selector to auto-populate the input box with the the entire amount of that collateral asset within the Borrow Position. If it is the only asset as collateral, the `Max` button will close the `Borrow Position` after completion.&#x20;

<figure><img src="/files/ohiSOEkXkwm5mlFR49pG" alt="" width="542"><figcaption><p>Example: Removing all USDC.e collateral from the Position, USDC.e -> ETH, ETH -> Balance, Position closes.</p></figcaption></figure>

Under the bottom input box, you can find exactly what the `Zap` trade will do. Once you are done reviewing your `Zap`, click the green "⚡ ZAP" button to begin executing the necessary transactions to complete the `Zap` trade. After successful transactions, you should see less collateral within your `Borrow Position` and more of your desired asset in your Dolomite Balance. If you removed all of the collateral from the `Borrow Position`, the `Borrow Position` will close and disappear.&#x20;

{% hint style="info" %}
As `Zap` trades require multiple steps to execute on the blockchain, the transaction costs will be greater than simply withdrawing the asset to your Dolomite Balance.&#x20;
{% endhint %}

### ⚡ Trade into Different Collateral

The "Zap - Trade into different Collateral" option allows users to seamlessly trade one collateral asset to another asset, and keep it as collateral, even while actively borrowing against that collateral, regardless of how complicated the `Borrow Position` may be. The following section will provide you with the location and a guide for using this feature.

#### Location

1. [**Borrow Page**](https://app.dolomite.io/borrow) **→ Borrow Position ->  Swap&#x20;*****(collateral side)***

<figure><img src="/files/itltmF11oiNMqWLO7KWs" alt=""><figcaption><p>The checkbox will already be selected.</p></figcaption></figure>

#### Guide

Locate this `Zap` option within a `Borrow Position` by clicking the `Swap` tab *(on the collateral side of the Borrow Position)*. The `Zap` option will already be selected by default. The top input box is the `Borrow Position` collateral you wish to swap from, while the bottom input box is the asset you will swap to then add as collateral. You can select your desired assets for the swap using the asset selector to the right of the input boxes. You can use the `Max` button above the asset selector to auto-populate the input box with the the entire amount of that collateral asset within the `Borrow Position`.

<figure><img src="/files/E7ULHVIk30Aq41q8RYiR" alt="" width="527"><figcaption><p>Example: Swapping all USDC.e collateral to ETH collateral. As there are no assets borrowed, the Position Health remains the same, but due to a difference in Liquidation Thresholds between assets, the Position Health may change, despite the $ amount staying consistent.</p></figcaption></figure>

Under the bottom input box, you can find exactly what the `Zap` trade will do. Take note of the difference in Position Health shown in the top right of the section, if there is any. Some assets may have different liquidation thresholds, and as a result changing collateral can cause a change in health factor, although this is not the case if both assets have the same liquidation threshold.

Once you are done reviewing your `Zap`, click the green "⚡ ZAP" button to begin executing the necessary transactions to complete the `Zap` trade. After successful transactions, you should see the same value amount of collateral within your `Borrow Position`, a change in collateral asset(s), and perhaps a change in Position Health.&#x20;

{% hint style="info" %}
When you are swapping collateral between assets with different Liquidation Thresholds, the Position Health will change after the swap to reflect this. Some swaps may not be possible due to the outcome of the swap possibly leaving the Position with a Health Factor under 1.&#x20;
{% endhint %}

{% hint style="info" %}
As `Zap` trades require multiple steps to execute on the blockchain, the transaction costs will be greater than simply adding or removing collateral.&#x20;
{% endhint %}

### ⚡ Borrow, Swap and Repay Debt

Similar to "Zap - Trade into different Collateral," the "Zap - Borrow, swap, and repay debt" essentially swaps between borrowed assets. It first borrows your desired asset, swaps it to an asset that is currently being borrowed, and repays that debt.&#x20;

#### Location

1. [**Borrow Page**](https://app.dolomite.io/borrow) **→ Borrow Position -> Swap&#x20;*****(borrow side)***

<figure><img src="/files/NVbuuS4w3Vg03YRkaZRq" alt="" width="563"><figcaption></figcaption></figure>

Locate this `Zap` option within a `Borrow Position` by clicking the `Swap` tab *(the borrow side of the Borrow Position)*. The `Zap` option will already be selected by default. The top input box is the asset you wish to borrow, while the bottom input box is a borrowed asset you will swap to, then pay the debt for. You can select the asset you want as debt using the asset selector to the right of the top input box.&#x20;

<figure><img src="/files/DnJ4jS0iZA9BnW0Chrql" alt="" width="493"><figcaption><p>Example: 0.001 ETH is added as debt, paying off 0.223 LINK as debt within the Borrow Position. As 0.223 > 0.1 (Position Debt), so the extra LINK is added as Collateral in the Position. </p></figcaption></figure>

Currently you cannot pay an exact amount relative to your current debt of a different asset, meaning there is a range of amounts in the top input box that will change the future position. Here are the possibilities:

1. ***New Debt Amount < Current Debt Amount:***

– In this case, where the value of the top input box is less than the debt that will be paid off, the debt of the asset in the top input box will increase, while the debt being paid off will decrease. This means that after the `Zap` trade is completed, there should be less of the previous debt, and more of the new asset debt in the `Borrow Position`.&#x20;

– In terms of the Position Health, the Health should be the same as prior to the `Zap` if the Liquidation Thresholds match between asset debts, but if not, the Position Health will increase or decrease in relation after the `Zap` is competed. This will be previewed in the top right of the `Zap` trade.

2. ***New Debt Amount > Current Debt Amount:***

– In this case, where the value of the top input box is greater than the debt that will be paid off, the debt of the asset in the top input box will be added as debt to the `Borrow Position`, while the debt being paid off will be completely paid off and removed as a debt within the `Borrow Position`. The excess of the trade to pay off the previous debt will be added as collateral within the position.&#x20;

– In terms of the Position Health, the Health will generally be less than prior to the `Zap`, and Liquidation Threshold of both assets are factored in.&#x20;

3. ***New Debt Amount = Current Debt Amount:***

– If the value of the top input box value matches the debt that will be paid off exactly, the new asset debt will replace the old asset debt, retaining the same value. Essentially, the assets are swapped, similar to "Zap - Trade into Different Collateral," but with debt instead.&#x20;

– In terms of the Position Health, the Health should be the same as prior to the `Zap` if the Liquidation Thresholds match between asset debts, but if not, the Position Health will increase or decrease in relation after the `Zap` is competed. This will be previewed in the top right of the `Zap` trade.

– Currently, paying off the exact amount of debt within a position with this `Zap` method has to be done manually (i.e. enter in the exact value amount equal to the debt in the top input box), however there are plans for this to be automated in the future.&#x20;

Once you are done reviewing your `Zap`, click the green "⚡ ZAP" button to begin executing the necessary transactions to complete the `Zap` trade. After successful transactions, you should see the correlated changes mentioned above depending on the *New Debt Amount* versus the *Current Debt Amount*.&#x20;

{% hint style="info" %}
As `Zap` trades require multiple steps to execute on the blockchain, the transaction costs will be greater than your typical transaction on Dolomite.&#x20;
{% endhint %}


# Trade


# Pool


# History

The history page displays all actions done by your wallet on the Dolomite web app.

Using the various features of Dolomite can be hard to track on-chain due to Dolomite's `virtual liquidity` model. Fortunately, the **History** feature on Dolomite will display all completed actions you've taken on Dolomite, along with transaction specific data.&#x20;

***

## Navigating to History

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

The History feature can be found on the navigation panel at the top of the Dolomite app. By default, the **Borrows** section of your Dolomite History will be displayed, showing you all of your previous or active `Borrow Positions`.&#x20;

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

### Borrows

As shown in the image above, the Borrows section of your History will show you all **Open** or previously **Closed** `Borrow Positions`. Each of these Positions also displays:&#x20;

* Borrow Position Status
* Supply and Borrow USD value for active positions or the asset type for closed
* The precise time the `Borrow Position` was initially created

Beyond this basic Borrow Position info, you can also click on one of these Positions, where a information window will provide more information.&#x20;

<figure><img src="/files/fWoW31FbqiR9PSaCXLAz" alt=""><figcaption><p>This is an <strong>Open</strong> <code>Borrow Position</code></p></figcaption></figure>

**Open** `Borrow Positions` when clicked on, as shown in the image above, provide all the current information about the active position at the top, while providing all previous actions done within the position below *(i.e. Action - Amount - Date)*.&#x20;

Some Actions do multiple things in one instance, so more context on the Action is provided below it, depicted with "↪." One example is the  `Zap - Trade and deposit as collateral` transaction as shown in the Borrow Action in the image above.&#x20;

To find the actual transaction of that Action on the blockchain, click on the desired Action under the **Action** tab, highlighted red in the image above. This will provide you with the transaction on the correlated blockchain's explorer *(i.e. Arbiscan)*.&#x20;

<figure><img src="/files/4IuG4PkQd2K42vY7zyry" alt=""><figcaption><p>This is a <strong>Closed</strong> <code>Borrow Position</code></p></figcaption></figure>

A **Closed** `Borrow Position` will provide the same information, naturally without any active information. The blockchain transaction for each Action can be found in the same way as an **Open** `Borrow Position`.&#x20;

### Trades

The next tab over on the **History** page provides all of your **trades**. "Trades" might seem ambiguous relative to its meaning on Dolomite, so to simplify, **trades** include:

* Trades done on the Dolomite's Trade tab
* Any swaps done via Dolomite's `Zap` feature *(i.e. in Borrow Positions or your Dolomite Balance exclusively)*. See the [Zap guide](https://docs.dolomite.io/guide/zap) for more information on Zap actions.&#x20;

<figure><img src="/files/tiJGFR1sbZGk9FmRxD1O" alt=""><figcaption><p>Click on the <strong>Trade</strong> under the Action section to see the transaction on the blockchain explorer.</p></figcaption></figure>

Each of these Trade Actions also displays:&#x20;

* A link to the trade transaction on the blockchain explorer
* The trade's input and output and asset type
* The unit price of the input asset at the time of the trade
* The date the trade transaction happened

### Transfers

The following tab on the **History** page provides all of your **Transfers**. Transfers in Dolomite terms means any deposits or withdrawals from your `Dolomite Balance`.&#x20;

<figure><img src="/files/II0LQMMvyvzkxObRHfuU" alt=""><figcaption><p>Click on the <strong>Transaction Hash</strong> under the Transaction section to see the transaction on the blockchain explorer.</p></figcaption></figure>

Each of these Transfer Actions also displays:&#x20;

* Action type *(i.e. Deposit or Withdrawal)*,
* Transfer amount and asset
* Transaction with a hyperlink to the transaction on the blockchain explorer
* The date the transaction happened&#x20;

### Pooling

The last tab on the **History** page provides all of your **Pooling** Actions. This means any deposits or withdrawals from a Dolomite Pool *(i.e. in the **Pool** tab on your navigation bar)*.

<figure><img src="/files/Dto3Tr8g34F340YUMStQ" alt=""><figcaption><p>Click on the <strong>Pooling Action</strong> under the Action section to see the transaction on the blockchain explorer.</p></figcaption></figure>

Each of these Pooling Actions also displays:&#x20;

* Action type *(i.e. Adding or Withdrawing)*
* The total USD value of the action
* The amount of both sides of the pair
* The date the Pooling transaction happened&#x20;

***


# Stats

All about Dolomite's Stats page.

The [Stats page](https://app.dolomite.io/stats) on Dolomite depicts relevant data about assets integrated, liquidity pools, and recent actions completed on Dolomite. The following section will break down each component of the Stats page.&#x20;

## Stats Page

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

The [**Stats** page](https://app.dolomite.io/stats) can be found on the navigation panel at the top of the Dolomite app. Clicking this will bring you to the top of the Stats page, where you will see graphs representing the Dolomite's Total Supply Liquidity and Total Value Borrowed.&#x20;

<figure><img src="/files/OK1uI2hdvUqGg84HvtXL" alt=""><figcaption><p>Stats page: Arbitrum</p></figcaption></figure>

{% hint style="info" %}
**Note:** Dolomite is currently integrated with multiple Networks, so the Stat page you see will only portray relevant data for the Network selected.

* **See this section:** <https://docs.dolomite.io/different-networks#switching-networks> for a guide on how to switch Networks.
  {% endhint %}

### 1. Total Supply Liquidity and Total Value Borrowed

At the top of the Stats page, as shown in the image above, you will see two charts. The x-axis represents *constant time*, while the y-axis represents the *Total Supply Liquidity* and *Total Value Borrowed*, respectively.&#x20;

* *Total Supply Liquidity* is the sum of the USD value of all active and integrated assets **supplied/held** in users `Dolomite Balance` and **collateral** within `Borrow Positions`.
* *Total Value Borrowed* is the sum of the USD value of all active and integrated assets **borrowed** within `Borrow Positions`.

Hovering over these charts will present you with the USD value for these stats at a specific day *(going back roughly a month).*

### 2. Top Tokens

The following section provides a dynamic leaderboard of all the assets integrated with Dolomite. By default, the leaderboard will sort by *Total Supply Liquidity* for each asset *(from most to least)*.&#x20;

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

A useful feature of this asset leaderboard is the ability to search for tokens/assets. To do this, simply use the search bar displayed in the upper left of the Top Tokens panel, and type in the name, symbol, or contract address of the asset you'd like to search for.

<figure><img src="/files/XGvropUnVjdKRcIYQICM" alt="" width="375"><figcaption></figcaption></figure>

You can also filter via a category such as, Stable, Isolation, Pendle, LST, etc.&#x20;

Beyond this handy feature, the leaderboard also allows you to sort the following statistics in ascending or descending order:

* *Price*: the price of the asset via its correlated oracle
* *Borrow Rates (interest rate)*: the cost or rate to borrow the asset&#x20;
* *Supply Rates (interest rate)*: the yield or rate to be paid for supplying the asset
* *Supply Liquidity*: USD value sum of the asset across **supplied/held** in users' `Dolomite Balances` and **collateral** within `Borrow Positions`.

{% hint style="info" %}
You can hover over blue *Borrow Rates* and *Supply Rates* to see what sources the yield/incentives are derived from.
{% endhint %}

### 3. Pool Stats

Below the asset leaderboard section you will find information about the active liquidity pools hosted on Dolomite.&#x20;

<figure><img src="/files/Dl9d4moN1XcZonaUsSbk" alt=""><figcaption><p>Only one pool currently on Arbitrum.</p></figcaption></figure>

The *Total Pool Liquidity* accounts for the sum of the USD value of all the pools hosted in Dolomite. In the case of Arbitrum in the the image above, there's only one pool available, hence the *Total Pool Liquidity* is the USD value sum of the ETH and USDC.e in that pool.&#x20;

The chart on the right side of the image provides the *Volume* of all the pools. This means the USD value of actions done utilizing the pool(s).&#x20;

Lastly, we have a pool leaderboard, similar to the Top Tokens leaderboard. You can choose to sort by *Reserve/Pool Liquidity*, 24 hour *Volume*, or 7 day *Volume*.

### 4. Recent Transactions

At the bottom of the Stats page, you will find a section depicting all the recent *Trades*, *Transfers*, and *Liquidations*. To clarify what each of these Dolomite actions mean:

* ***Trades*****:** Trades done on the Dolomite's Trade tab, and any swaps done via Dolomite's `Zap` feature *(i.e. in Borrow Positions or your Dolomite Balance exclusively)*. See the [Zap guide](https://docs.dolomite.io/guide/zap) for more information on Zap actions.&#x20;
* ***Transfers*****:** Any deposits or withdrawals from a user's `Dolomite Balance` and Wallet.
* ***Liquidations*****:** A record of all liquidated positions. A `Borrow Position` is liquidated when it goes below a `Position Health` threshold of 1. `Position Health` is a "factor" of the LTV (loan to value) percent/ratio on both the collateral and borrow sides of a `Borrow Position`.&#x20;

Each category of action has its own tab, showing all the most recent actions for the category. Click the desired category at the top of the table to switch to it. The following section will break down each category fully:

{% tabs %}
{% tab title="Trades" %}
As mentioned above, **Trades** are any "swapping" action done on Dolomite, such as utilizing the Trade page or using `Zap`.

<figure><img src="/files/nwhB04edpzgqa4S1ML7z" alt=""><figcaption><p>This Category is automatically sorted by most recent transactions.</p></figcaption></figure>

* *Trade:* Represents what asset was traded for another asset within Dolomite.
* *USD Value:* The USD value of the action *(asset \* USD price of asset)*.
* *Token Amount (1st):* The amount of the asset that was traded.
* *Token Amount (2nd):* The amount of the asset that was received.
* *Account:* The user's abstracted account that interacts with every feature within Dolomite *(i.e. Dolomite Balance and Borrow Positions)*.
* *Time:* How long ago or on what day the transaction took place.&#x20;
  {% endtab %}

{% tab title="Transfers" %}
As mentioned above, **Transfers** are any deposits or withdrawals from a user's `Dolomite Balance`.

<figure><img src="/files/XHrXRzWQ0yw00likydyP" alt=""><figcaption><p>This Category is automatically sorted by most recent transactions.</p></figcaption></figure>

* *Transaction:* Represents the action *(withdrawal or deposit)* and asset.
* *USD Value:* The USD value of the action *(asset \* USD price of asset)*.
* *Token Amount:* The amount of the asset that was deposited or withdrawn.
* *Account:* The user's abstracted account that interacts with every feature within Dolomite *(i.e. Dolomite Balance and Borrow Positions)*.
* *Time:* How long ago or on what day the transaction took place.&#x20;
  {% endtab %}

{% tab title="Liquidations" %}
As mentioned above, **Liquidations** are events on Dolomite when a `Borrow Position` goes below the `Position Health` threshold of 1. When this happens, collateral in the position is sold off to pay the loan debt, while also incurring a liquidation penalty.

<figure><img src="/files/PqsLAxCRMH9XkUQvLCOg" alt=""><figcaption><p>This Category is automatically sorted by most recent transactions.</p></figcaption></figure>

* *Liquidation:* Represents what asset was traded for another asset when the liquidation happened *(i.e. collateral for what was borrowed)*.&#x20;
* *USD Debt Liquidated:* The USD value of the debt that was paid off *(asset \* USD price of asset)*.
* *Debt Amount:* The amount of the asset that was debt in the `Borrow Position`. To find the price that the debt asset was at when liquidated, simply do `(USD Debt Liquidated) / (Debt Amount)`.
* *Collateral Amount:* The amount of the asset that was sold off to pay the debt.&#x20;
* *Account:* The user's abstracted account that interacts with every feature within Dolomite *(i.e. Dolomite Balance and Borrow Positions)*.
* *Time:* How long ago or on what day the transaction took place.&#x20;
  {% endtab %}
  {% endtabs %}

## Asset Stats

Each asset integrated with Dolomite has its own Stats page, presenting all the relevant information and data about the asset. Here are two methods to find an asset's Stats page:

{% tabs %}
{% tab title="Stats Page" %}

<figure><img src="/files/6xjXbq7s5eHVz13rPjyV" alt=""><figcaption><p>Found in the middle of the Stats page.</p></figcaption></figure>

The first method to see an asset's Stats page is to find the asset on the leaderboard *(see* [#id-2.-top-tokens](#id-2.-top-tokens "mention")*)*, and click the desired asset. This will bring you to the asset's Stats page.
{% endtab %}

{% tab title="Borrow Page" %}
On the Borrow page, go to the right side of the page and find the asset you want more information on.

<figure><img src="/files/sLHFXJp2Wm3agDMqkMm3" alt="" width="264"><figcaption></figcaption></figure>

Click on your desired asset to expand the panel to show more information. This will already provide a few handy statistics, but for the full page, click on **Token Details**.
{% endtab %}
{% endtabs %}

### 1. General Info

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

The top of an asset's Stats page will provide general information such as liquidity, volume, and interest rate. The following points break down key statistics:

* ***Supply Liquidity:*** The sum of the USD value of the asset **supplied/held** in users' `Dolomite Balances` and **collateral** within `Borrow Positions`.
* ***Supply Interest Rate*****:** The interest received by suppliers of the asset on Dolomite. This includes lending interest and any additional incentives from outside of Dolomite. For example, GMX in the image above receives only its inherent APR from "ETH Base Yield" from GMX, rather than interest from Dolomite *(its not a borrowable asset, so it does not earn lending interest)*.
* ***24H/7D Volume*****:** All the volume done with the asset such as trades and borrows.&#x20;
* ***Collateral Tokens*****:** Which tokens are available to be collateral along with this asset. The example above shows "All," meaning it can be used with any asset. Some assets are limited in order to minimize risk, and can only be used in conjunction with a limited set of other assets.
* ***Debt Tokens*****:** Which tokens are available to be debt/borrowed within a `Borrow Position` with this asset. Also done to minimize risk with certain assets.

*Example of an Asset with Collateral/Debt Token Restrictions:*

<figure><img src="/files/A65UX9lJueL9238YaQm8" alt=""><figcaption><p>gmETH-USD asset</p></figcaption></figure>

### 2. Interest Rate Model and Restrictions

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

The second section of an individual asset page presents the Interest Rate Model used for the asset *(i.e. the relationship between borrowers and lenders)*, along with other key statistics about its functionality on Dolomite. Here is a break down of each key statistic in this section:

* ***Interest Rate Model*****:** Each asset has an Interest Rate Model built to market fit. To put it simply, as the utilization rate *(i.e. amount of the supply being borrowed)* increases, the interest rate goes up. For most assets, once it hits a high percent of utilization, 80% for example, the APR will begin scaling much quicker. This model keeps interest rates low for borrowers for as long as possible, while encouraging further deposits if too much of the asset is being borrowed. This relationship can be seen in the image above.&#x20;
* ***Liquidation Threshold*****:** This is the limit to the value of debt compared to the valu of collateral when using this asset in a borrow position. For example, with an 83.33% liquidation threshold, the value of your debt cannot exceed 83.33% the value of your collateral in a borrow position. Each borrow position takes into account the liquidation thresholds of all assets in the position.
* ***Liquidation Penalty*****:** If the *Liquidation Threshold* is been exceeded, then the `Borrow Position` is subject to liquidation. The *Liquidation Penalty* is a percent of the asset liquidated that will be paid to the liquidator.
* ***Supply Cap*****:** As Dolomite hosts a variety of assets for users to utilize for their personal strategies, and some assets have limited available liquidity on-chain, assets are sometimes set with a supply cap. This supply cap makes sure that if the worst happens and many users are liquidated, the market can still allow the assets to be sold and lenders to be repaid. Once the cap is hit, adding more of the asset in anyway to Dolomite is prevented.
* ***Available to Borrow*****:** The amount currently available on Dolomite to borrow.&#x20;
* ***Borrowable*****:** Some assets are not available to borrow due to being in `Isolation Mode` or `Collateral-Only` mode.&#x20;
* ***Oracle Contract*****:** A link to the contract that the live price feed/oracle for the asset is derived from. You can also find the sources of the oracle in the docs: [Risk Management](/risk-management#price-oracles).

### 3. Recent Transactions

At the bottom of the asset's Stats page, you will find a section depicting all the recent *Trades*, *Transfers*, and *Liquidations* made with the asset. To clarify what each of these actions mean on Dolomite:

* ***Trades*****:** Trades done on the Dolomite's Trade tab and any swaps done with the asset via Dolomite's `Zap` feature *(i.e. in Borrow Positions or your Dolomite Balance exclusively)*. See the [Zap guide](https://docs.dolomite.io/guide/zap) for more information on Zap actions.&#x20;
* ***Transfers*****:** Any deposits or withdrawals using the asset from a users `Dolomite Balance`.
* ***Liquidations*****:** When a `Borrow Position` with the asset goes below the `Position Health` threshold of 1. `Position Health` is a "factor" of the LTV (loan to value) percent/ratio on both the collateral and borrow side of a `Borrow Position`.&#x20;

Each category of action has its own tab, showing all the most recent actions for the category. Click the desired category at the top of the table to switch to it. The following section will break down each category fully:

{% tabs %}
{% tab title="Trades" %}
As mentioned above, **Trades** are any "swapping" action done on Dolomite, such as interacting with the Trade page or using `Zap`.

<figure><img src="/files/nwhB04edpzgqa4S1ML7z" alt=""><figcaption><p>This Category is automatically sorted by most recent transactions.</p></figcaption></figure>

* *Trade:* Represents what asset was traded for another asset within Dolomite.
* *USD Value:* The USD value of the action *(asset \* USD price of asset)*.
* *Token Amount (1st):* The amount of the asset that was traded.
* *Token Amount (2nd):* The amount of the asset that was received.
* *Account:* The user's abstracted account that interacts with every feature within Dolomite *(i.e. Dolomite Balance and Borrow Positions)*.
* *Time:* How long ago or on what day the transaction took place.&#x20;
  {% endtab %}

{% tab title="Transfers" %}
As mentioned above, **Transfers** are any deposits or withdrawals from a user's `Dolomite Balance`.

<figure><img src="/files/XHrXRzWQ0yw00likydyP" alt=""><figcaption><p>This Category is automatically sorted by most recent transactions.</p></figcaption></figure>

* *Transaction:* Represents the action and asset *(withdrawal or deposit)*.
* *USD Value:* The USD value of the action *(asset \* USD price of asset)*.
* *Token Amount:* The amount of the asset that was traded.
* *Account:* The user's abstracted account that interacts with every feature within Dolomite *(i.e. Dolomite Balance and Borrow Positions)*.
* *Time:* How long ago or one what day the transaction took place.&#x20;
  {% endtab %}

{% tab title="Liquidations" %}
As mentioned above, **Liquidations** are events on Dolomite when a `Borrow Position` goes below the `Position Health` threshold of 1. When this happens, collateral in the position is sold off to pay the loan debt, while also incurring a liquidation penalty.

<figure><img src="/files/PqsLAxCRMH9XkUQvLCOg" alt=""><figcaption><p>This Category is automatically sorted by most recent transactions.</p></figcaption></figure>

* *Liquidation:* Represents what asset was traded for another asset when the liquidation happened *(i.e. collateral for what was borrowed)*.&#x20;
* *USD Debt Liquidated:* The USD value of the debt that was paid off *(asset \* USD price of asset)*.
* *Debt Amount:* The amount of the asset that was debt in the `Borrow Position`. To find the price that the debt asset was at when liquidated, simply do `(USD Debt Liquidated) / (Debt Amount)`.
* *Collateral Amount:* The amount of the asset that was sold off to pay the debt.&#x20;
* *Account:* The user's abstracted account that interacts with every feature within Dolomite *(i.e. Dolomite Balance and Borrow Positions)*.
* *Time:* How long ago or on what day the transaction took place.&#x20;
  {% endtab %}
  {% endtabs %}


# Switching Networks

Brief overview on the implications of networks on Dolomite.

### Switching Networks

The process for switching to a different network will be different depending on the wallet. The easiest way to switch networks, is to have the Dolomite app push the change to your wallet.

#### 1. Click on the box representing the current Network

<figure><img src="/files/S9DljQIRxDHJWjUehgBk" alt="" width="563"><figcaption></figcaption></figure>

You will find a box representing the current chain that you are on in the navbar at the top right of the screen. If the chain your wallet is on is not available as an option on Dolomite you will see red "Wrong Network" message instead.&#x20;

Clicking the box will populate a menu of Network options to choose from.&#x20;

* &#x20; [Connecting to Dolomite Guide](https://docs.dolomite.io/guide#connecting-your-wallet)

#### 2. Choose desired network

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

Once you see the menu of networks integrated with Dolomite, as shown above, you can select the you desired Network to switch to.

#### 3. Add a new Network to wallet

<figure><img src="/files/USfQI2NPuCH3LIT7pVBx" alt="" width="375"><figcaption><p><em><strong>Note:</strong></em> Metamask will have another window pop up after this one, to confirm the Network switch.</p></figcaption></figure>

If it is your first time connecting to the network, many wallets will prompt you to verify that you want to add/switch to the selected network. This is demonstrated in the image above with the Metamask wallet.&#x20;

However other wallets may simply switch you over to the desired Network automatically, such as the Rabby wallet, as Networks such as Polygon zkEVM are already integrated with the wallet.

Once you approve the correlated Network message(s), you will be connected to the selected Network. As you are on a different Network, the assets shown in your wallet will change to represent the assets you hold on that current Network (i.e. assets on Polygon zkEVM ≠ assets on Arbitrum).

{% hint style="info" %}
***Note:*** As mentioned in the following sections, a different Network means that there are different assets, asset liquidity, asset APRs, Dolomite Rewards, etc.
{% endhint %}

{% hint style="info" %}
If the current RPC is not as responsive as it should be, changing RPCs might be needed. You can visit <https://chainlist.org/> for a list of RPCs and their statuses. \
Here is brief guide to change RPC URL on Metamask: [Changing RPC URL](https://docs.dolomite.io/guide#steps-to-change-the-rpc-url-in-metamask).
{% endhint %}

### Bridging Assets to a different Network

{% tabs %}
{% tab title="Arbitrum" %}
You will need to have at least ETH as a gas token on Arbitrum to begin using Dolomite on Arbitrum.

If you have ETH on other networks you can transfer ETH to Arbitrum using the [Arbitrum Bridge](https://bridge.arbitrum.io/). The transfer will take a few minutes. You will also be able to transfer out within a few minutes as well if you use any of the below options:

* [Across](https://across.to/)​
* ​[Hop.Exchange](https://app.hop.exchange/send?token=USDC\&sourceNetwork=ethereum\&destNetwork=arbitrum)​
* ​[Synapse](https://synapseprotocol.com/?inputCurrency=ETH\&outputCurrency=ETH\&outputChain=42161)

For more information on bridging, we recommend reading the [Arbitrum Bridge Tutorial](https://arbitrum.io/bridge-tutorial/).​
{% endtab %}

{% tab title="Mantle" %}
You will need to have at least some MNT as a gas token on Mantle to begin using Dolomite on Mantle.

If you have ETH or MNT on Ethereum mainnet you can bridge to Mantle using the [Mantle Bridge](https://bridge.mantle.xyz/). The bridge will take a few minutes. You will also be able to bridge to/from Mantle within a few minutes as well if you use any of the below options:

* [Stargate](https://stargate.finance/transfer)
* [Orbiter](https://www.orbiter.finance/?source=Arbitrum\&dest=Mantle\&token=ETH)
  {% endtab %}

{% tab title="Polygon zkEVM" %}
You will need to have at least ETH as a gas token on Polygon zkEVM to begin using Dolomite on Polygon zkEVM. If you have ETH on other networks you can transfer ETH to zkEVM using the Polygon zkEVM Bridge.

* [Polygon zkEVM Bridge](https://portal.polygon.technology/bridge)
* [Guide to use the Polygon zkEVM Bridge](https://docs.polygon.technology/zkEVM/get-started/quick-start/bridge-to-zkevm/)

There are also many Third-Party options to bridge to Polygon zkEVM, which are listed on the official Bridge, "Bridge using Third-Party Bridges ->."

Here are a few Third-Party options:

* [Orbiter Finance](https://www.orbiter.finance/?source=Arbitrum\&dest=Polygon%20zkEVM\&sources=\&dests=\&token=ETH)
* [Hop Protocol](https://app.hop.exchange/#/send?token=ETH\&sourceNetwork=arbitrum\&destNetwork=polygonzk)
* [Jumper Bridge Aggregator](https://jumper.exchange/?fromChain=42161\&fromToken=0x0000000000000000000000000000000000000000\&toChain=1101\&toToken=0x0000000000000000000000000000000000000000)
  {% endtab %}

{% tab title="X Layer" %}
You will need to have at least some OKB as a gas token on X Layer to begin using Dolomite on X Layer.

If you have ETH on Ethereum mainnet you can bridge and swap to OKB on X Layer using the [OKX Bridge feature](https://www.okx.com/web3/dex-swap/bridge#inputChain=1\&inputCurrency=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\&outputChain=196\&outputCurrency=0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee). The bridge will take a few minutes. You will also be able to bridge to X Layer within a few minutes as well if you use any of the below options:

* [Or​​biter](https://www.orbiter.finance/?source=Arbitrum\&dest=X%20Layer%20mainnet\&sources=\&dests=\&token=ETH) *(will provide a small amount of OKB to use as gas which bridging)*
  {% endtab %}
  {% endtabs %}

### Network Implications: Assets

Different networks have different implications in terms of assets and asset capabilities on Dolomite. For example, some assets that are integrated onto Dolomite are native and only on Arbitrum, meaning they cannot be used on other Networks such as Polygon zkEVM.&#x20;

For assets that are not native to only one of the available Networks on Dolomite, they will still have different APRs and liquidity pools on each of the available Networks that they are on. One example of this is ETH. ETH is available on Dolomite on both the Arbitrum and Polygon zkEVM Network, yet have different APRs and available liquidity.&#x20;

**This principle is true of Dolomite Incentivization Programs on different Networks as well** *(i.e. Minerals)***.** ETH happens to be apart of the [oARB Incentives Program](https://docs.dolomite.io/oarb-incentives-program) on the Arbitrum Network, yet the same rewards and addition APRs will not be applied to Networks such as Polygon zkEVM.&#x20;

These implications are important to be mindful of when utilizing Dolomite.&#x20;


# Campaign Guides

Guides for Special Dolomite Campaigns

### Special Dolomite Campaigns

Special Dolomite campaigns are campaigns that are usually very specific to a certain task or integration on Dolomite, and generally launched in conjunction with an event such as an integration of a new asset or the launch of a new feature. These are a great way to discover new features, assets, and strategies on Dolomite. However, due to the multiple step nature of these Campaigns, completing them can be confusing. The following Guides below this page provides more support to completing each active Special Campaign.&#x20;

### The Nature of Borrowing

All the current Special Campaigns have Credentials/Objectives that requires a user to `borrow` an asset for a minimum of 24 hours to qualify. However, due to the nature of borrowing, the user will be paying interest on the asset that is being borrowed. In order to close a `borrow` position, the user will need to pay the borrowed amount + interest accrued.&#x20;

An inherent risk of borrowing are liquidations. It is important to note the `Position Health` of a borrow position when borrowing, as a Health closer to 1 will have a higher risk of liquidation, especially on higher risk assets. See [Risk Mitigation](https://docs.dolomite.io/risk-mitigation) for more information.


# Zap your GLP! Campaign

The [Zap your GLP! Campaign](https://galxe.com/dolomite/campaign/GC7bZU7gcC) is a part of Dolomite's [Community XP](https://docs.dolomite.io/community-xp) program. The campaign awards 10 XP for achieving a series of credentials/objectives related to the `Zap` feature on Dolomite and `zapping` using four different types of GLP assets. The following guide will describe how to achieve each of the four credentials for the Zap your GLP! Campaign.

This campaign utilizes [Galxe](https://galxe.com/dolomite) for tracking progress and distributing XP. After all four Credentials are met on the [Zap your GLP! Campaign Galxe Page](https://galxe.com/dolomite/campaign/GC7bZU7gcC), you can go to the Galxe page to claim an OAT representing the 10 XP. If you're new to the XP program, make sure you also go to the Dolomite Discord channel and connect your Galxe account so you can receive Discord roles that match your level.

{% hint style="info" %}
Note: Zap your GLP! Campaign does not have a minimum asset amount necessary for any of the credentials/objectives.
{% endhint %}

## Credentials

> 1 – 3. **Zap to each GLP asset&#x20;*****(i.e. GLP, plvGLP, and mGLP)***

* The `Zap` can be done either *to* the GLP asset, or *from* the GLP asset.
* All of these assets are `Collateral-Only` mode, meaning it cannot be borrowed. This reduces the amount of possible `Zaps` types that can be used to complete the Credential.&#x20;
* GLP and plvGLP are all `Isolation-Mode` assets.

## Example

For the example, I will be using the [Zap Swap Panel](https://docs.dolomite.io/guide/zap#zap-swap-panel) swap to each of the assets. However, as there are many different ways to `Zap` between assets on Dolomite, you are able to complete this Campaign using many different methods.&#x20;

Another worthwhile option to try, is a "looping" strategy with [Zap - Trade and deposit as collateral](https://docs.dolomite.io/guide/zap#trade-and-deposit-as-collateral). This `Zap` feature allows you to borrow an asset, then swap it, and add an asset as collateral. In the case of the GLP assets as collateral in a Borrow Position, this means you can:

* borrow an asset against the GLP collateral,
* trade this borrowed asset into more GLP,
* then add it as collateral within the Position.

This allows you to create a "loop," in one click, to increase the amount of yield obtained from your initial GLP amount. You can read about Zap - Trade and deposit as collateral, and each of the `Zap` options available on Dolomite within the [Zap Guide](https://docs.dolomite.io/guide/zap). For the sake of completing the Campaign efficiently, the following method will simply use the [Zap Panel](https://docs.dolomite.io/guide/zap#zap-swap-panel) to complete each of the necessary swaps.&#x20;

* **Zap an asset to each of the three GLP assets.**

<figure><img src="/files/DnRkX7TW8evrYTNIaLgW" alt="" width="563"><figcaption><p>Using the Swap Panel, found next to the APR/APY selector on the Balances page.</p></figcaption></figure>

Within your Dolomite Balance, on the Balances page, select the [Swap](https://docs.dolomite.io/guide/zap#zap-swap-panel) button. Swap to each of the four GLP assets *(i.e. GLP, plvGLP,  and mGLP)*, to complete each correlated Credential.

Congratulations! You have all the information necessary to complete the Zap your GLP! Campaign and be qualified to receive 10 XP!  With the skills you've learned from completing this campaign, you are now familiar with the Zap feature of Dolomite, which will allow you to have a more seamless experience within Borrow Positions.


# Zap your ETH! Campaign

The [Zap your ETH! Campaign](https://galxe.com/dolomite/campaign/GC5yZU7KTq) is a part of Dolomite's [Community XP](https://docs.dolomite.io/community-xp) program. The campaign awards 10 XP for achieving a series of credentials/objectives related to the `Zap` feature on Dolomite and `zapping` using two different types of ETH assets. The following guide will describe how to achieve each of the four credentials for the Zap your ETH! Campaign.

This campaign utilizes [Galxe](https://galxe.com/dolomite) for tracking progress and distributing XP. Both Credentials are met on the [Zap your ETH! Campaign Galxe Page](https://galxe.com/dolomite/campaign/GC5yZU7KTq), you can go to the Galxe page to claim an OAT representing the 10 XP. If you're new to the XP program, make sure you also go to the Dolomite Discord channel and connect your Galxe account so you can receive Discord roles that match your level.

{% hint style="info" %}
Note: Zap your ETH! Campaign does not have a minimum asset amount necessary for any of the credentials/objectives.
{% endhint %}

## Credentials

> 1\. **Zap ETH to rETH**

> 2\. **Zap ETH to wstETH**&#x20;

* The `Zap` has to be *from* ETH, *to* either rETH or wstETH.
* rETH and wstETH are ***not*** assets in `Collateral-Only` or `Isolation` mode, meaning there are ***no*** restrictions on which `Zap` method to use.

You can read about each of the `Zap` options available on Dolomite within the [Zap Guide](https://docs.dolomite.io/guide/zap).&#x20;

## Example

For the example, I will be using the [Zap Swap Panel](https://docs.dolomite.io/guide/zap#zap-swap-panel) swap to both rETH and wstETH. However, as there are many different ways to `Zap` between assets on Dolomite, you are able to complete this Campaign using many different methods.&#x20;

Another worthwhile option to try, is a "looping" strategy with [Zap - Trade and deposit as collateral](https://docs.dolomite.io/guide/zap#trade-and-deposit-as-collateral). This `Zap` feature allows you to borrow an asset, then swap it, and add an asset as collateral. In the case of the rETH/wstETH assets as collateral in a Borrow Position, this means you can:

* borrow an asset against the rETH/wstETH collateral,
* trade this borrowed asset into more rETH/wstETH,
* then add it as collateral within the Position.

This allows you to create a "loop," in one click, to increase the amount of yield obtained from your initial rETH/wstETH amount. You can read about Zap - Trade and deposit as collateral, and each of the `Zap` options available on Dolomite within the [Zap Guide](https://docs.dolomite.io/guide/zap). For the sake of completing the Campaign efficiently, the following method will simply use the [Zap Panel](https://docs.dolomite.io/guide/zap#zap-swap-panel) to complete each of the necessary swaps.&#x20;

* **Zap ETH to rETH or wstETH.**

<figure><img src="/files/7O30jLd5ZLipEQhlBMEF" alt="" width="563"><figcaption><p>Using the Swap Panel, found next to the APR/APY selector on the Balances page.</p></figcaption></figure>

Within your Dolomite Balance, on the Balances page, select the [Swap](https://docs.dolomite.io/guide/zap#zap-swap-panel) button. Swap ETH to rETH and wstETH, to complete each correlated Credential.

Congratulations! You have all the information necessary to complete the Zap your ETH! Campaign and qualify to receive 10 XP! With the skills you've learned from completing this campaign, you are now familiar with the Zap feature of Dolomite, which will allow you to have a more seamless experience within Borrow Positions.


# MIM Launch Campaign

The MIM Launch Campaign is a part of Dolomite's [Community XP](https://docs.dolomite.io/community-xp) program. The campaign awards 10 XP for achieving a series of credentials/objectives related to MIM on Dolomite. The following guide will describe how to achieve the two credentials for the MIM Launch Campaign.

This campaign utilizes [Galxe](https://galxe.com/dolomite) for tracking progress and distributing XP. After completing both credentials on the [MIM Launch Campaign Galxe Page](https://galxe.com/dolomite/campaign/GC2uxUjEgj), you can go to the Galxe page to claim an OAT representing the 10 XP. If you're new to the XP program, make sure you also go to the Dolomite Discord channel and connect your Galxe account so you can receive Discord roles that match your level.&#x20;

{% hint style="info" %}
Note: MIM Launch Campaign does not have a minimum asset amount necessary for any of the credentials/objectives.
{% endhint %}

### Obtaining MIM

Abracadabra's MIM asset can be bought on a DEX such as Camelot, or `Zapped` to from another asset directly on Dolomite.

MIM's Arbitrum Contract Address:

* 0xFEa7a6a0B346362BF88A9e4A88416B77a57D6c2A

### Deposit MIM into Dolomite

On the Deposit/Withdraw panel at the top right of Dolomite's [Balances Page](https://app.dolomite.io/balances), click the asset selector to the right of the input field, then select MIM as the asset you want to deposit. Enter the desired deposit amount, then click the `Deposit`/`Unlock` button (if it's your first time depositing MIM, you will first need to unlock before depositing) This will initiate the wallet transaction to deposit the MIM to your Dolomite Balance. After the transaction succeeds, the MIM will be in your Dolomite Balance, and qualifies for the first Credential, "Deposit MIM into Dolomite." For more information on depositing assets to Dolomite, see the [Depositing to Dolomite Guide](https://docs.dolomite.io/guide/depositing-to-dolomite).

<figure><img src="/files/UBSisvL4QrSP6Dyx4gG3" alt=""><figcaption><p>Deposit MIM Into Dolomite</p></figcaption></figure>

### Borrow MIM against mGLP

For user ease, the best method to accomplish this credential will be to use `Zap` to trade an asset to mGLP, before adding it as collateral within a Borrow Position. This avoids having the task of obtaining mGLP from sources beyond Dolomite. However, that is still an option, you can obtain it via [Abracadabra](https://abracadabra.money/) (more instructions can be found [**here**](https://docs.dolomite.io/integrations/abracadabra-magicglp#how-can-you-get-magicglp)). Below, we will first Zap to mGLP and open a new Borrow Position with it as collateral, then borrow MIM within the same Borrow Position.

#### 1. `Zap -  Trade before adding` | Any Asset to mGLP

Go to the [Borrow Page](https://app.dolomite.io/borrow) and click `Open new Borrow Position` to start the position creation process. Click the `Zap - Trade before adding` button below the input box. Next to the top input box, select an asset from your Dolomite Balance that will be swapped to mGLP. This could be the MIM you just deposited in the previous credential, or any other asset you prefer that you have deposited to Dolomite. In the top input field, enter any amount of the asset you wish to swap to mGLP and add as mGLP collateral for the position. Then select mGLP from the asset selector to the right of the bottom input field. Take a moment to review the `Zap`, then click the green "Zap" button at the bottom of the Open New Borrow Position Box, and approve the transaction within your wallet. After a successful transaction, the borrow position will appear at the top of your Borrow Page.&#x20;

<figure><img src="/files/qkFiBOdmLN6Up6BVzkQi" alt=""><figcaption><p>An Example Zap to mGLP to open the Borrow Position</p></figcaption></figure>

#### 2. Borrow MIM

Locate your new Borrow Position on the page, you should see it with mGLP listed as collateral. Click on the borrow position to expand it and show additional information. Then click `Manage Loan`, then the `Borrow` tab on the position. Confirm that MIM is selected in the asset selector to the right of the input field, and enter an amount to borrow (up to 87% LTV, visit [Risk Mitigation](https://docs.dolomite.io/risk-mitigation) for more info). Click the `Borrow` button after checking the inputs are correct. After successfully confirming the transaction and holding the borrow position open for 24 hours, you will be qualified for the second credential. See the [Borrow Guide](https://docs.dolomite.io/guide/borrow) for more borrow position support.

<figure><img src="/files/wKj23AZjL1cL4jrixp4v" alt=""><figcaption><p>Borrowing MIM within the Position (mGLP as collateral)</p></figcaption></figure>

Congratulations! You've completed the MIM Launch Campaign and are qualified to receive 10 XP! After the 24 hour period has passed and you have claimed your XP, feel free to close the borrow position by repaying your loan (plus any interest accrued) and then withdrawing your collateral.


# jUSDC Launch Campaign

The [jUSDC Launch Campaign](https://galxe.com/dolomite/campaign/GCuQ5USe12) is a part of Dolomite's [Community XP](https://docs.dolomite.io/community-xp) program. The campaign awards 10 XP for achieving a series of credentials/objectives related to jUSDC on Dolomite and the skills used in "looping" a borrow position to increase APR. The following guide will describe how to achieve each of the three credentials for the jUSDC Launch Campaign.

This campaign utilizes [Galxe](https://galxe.com/dolomite) for tracking progress and distributing XP. After all three Credentials are met on the [jUSDC Launch Campaign Galxe Page](https://galxe.com/dolomite/campaign/GCuQ5USe12), you can go to the Galxe page to claim an OAT representing the 10 XP. If you're new to the XP program, make sure you also go to the Dolomite Discord channel and connect your Galxe account so you can receive Discord roles that match your level.

{% hint style="info" %}
Note: jUSDC Launch Campaign does not have a minimum asset amount necessary for any of the credentials/objectives.
{% endhint %}

### Obtaining jUSDC

[JonesDAO](https://www.jonesdao.io/)'s jUSDC asset is minted when USDC is deposited to the [Gamma Neutral USDC vault](https://app.jonesdao.io/vaults/leveraged/usdc), or can be bought on a DEX such as Camelot.

jUSDC Arbitrum Contract Address:

* [0xB0BDE111812EAC913b392D80D51966eC977bE3A2](https://arbiscan.io/token/0xB0BDE111812EAC913b392D80D51966eC977bE3A2)

### Deposit jUSDC into Dolomite

At the top right of Dolomite's [Balances Page](https://app.dolomite.io/balances), click the button with the arrow located above "DEPOSIT"/"UNLOCK" and to the right of the input field, then select jUSDC as the asset you want to deposit. Enter the desired deposit amount, then click the `Deposit`/`Unlock` button. This will initiate the wallet transaction to deposit the jUSDC to your Dolomite Balance. After the transaction succeeds, the jUSDC is now in your Dolomite Balance, and qualifies for the first Credential, "Deposit jUSDC into Dolomite." For more information on depositing assets to Dolomite, see the [Depositing to Dolomite Guide](https://docs.dolomite.io/guide/depositing-to-dolomite).

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

### Open a Borrow Position with jUSDC

Go to the [Borrow Page](https://app.dolomite.io/borrow) and click `Open new Borrow Position` to start the Position creation process. Select jUSDC from the asset selector to the right of the input field, and then enter the amount desired for collateral. Click `Add` and approve the transaction. After the transaction is complete, you will be qualified for the second credential after holding the position open for 24 hours. However to save yourself time, don't stop at this step for 24 hours, complete the next credential now as well. See the [Borrow Guide](https://docs.dolomite.io/guide/borrow) for more borrow position support.

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

### Borrow USDC.e against jUSDC

Locate your new Borrow Position on the page, you should see it with jUSDC listed as collateral. Click on the Borrow Position to expand it and show additional information. Then click `Manage Loan` then the `Borrow` tab on the Position. Confirm that USDC.e is selected in the asset selector to the right of the input field, and enter an amount to borrow (up to 87% LTV, visit [Risk Mitigation](https://docs.dolomite.io/risk-mitigation) for more info). Click the `Borrow` button after checking the inputs are correct. After successfully confirming the transaction and holding the borrow position open for 24 hours, you will be qualified for the third Credential. See the [Borrow Guide](https://docs.dolomite.io/guide/borrow) for more borrow position support.

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

Congratulations! You've completed the jUSDC Launch Campaign and are qualified to receive 10 XP! After the 24 hour period has passed and you have claimed your XP, feel free to close the borrow position by repaying your loan (plus any interest accrued) and then withdrawing your collateral.

Alternatively with the skills you've learned from completing this campaign, you can instead perform a "looping" strategy, whereby you take borrowed USDC, get more jUSDC, and add that jUSDC as collateral to the position. This increases the total yield you get from jUSDC compared to just holding the original amount, and is a strategy used by many users of Dolomite.


# YT-GLP Launch Campaign

The [YT-GLP Launch Campaign](https://galxe.com/dolomite/campaign/GCfRBUPtGi) is a part of Dolomite's [Community XP](https://docs.dolomite.io/community-xp) program. The campaign awards 10 XP for achieving a series of credentials/objectives related to YT-GLP. The following guide will describe how to achieve each of the three Credentials for the YT-GLP Launch Campaign.&#x20;

This campaign utilizes [Galxe](https://galxe.com/dolomite) for tracking progress and distributing XP. After all three Credentials are met on the [YT-GLP Launch Campaign](https://galxe.com/dolomite/campaign/GCfRBUPtGi), you can claim an OAT representing the 10 XP. If you're new to the XP program, make sure you also go to the Dolomite Discord channel and connect your Galxe account so you can receive Discord roles that match your level.

{% hint style="info" %}
Note: YT-GLP has expired as of March, 2024. Therefore, this campaign is no longer possible to complete at this time.
{% endhint %}

### Obtaining YT-GLP

YT-GLP (Yield Token GLP) can be obtained by swapping or minting for YT-GLP on [Pendle's Market](https://app.pendle.finance/trade/markets/0x7d49e5adc0eaad9c027857767638613253ef125f/swap?view=yt\&chain=arbitrum). When minting, both PT-GLP (Principal Token GLP) and YT-GLP (Yield Token GLP) are obtained. If you have minted for PT-GLP before, you likely already have YT-GLP in your wallet. Obtaining just YT-GLP can be done via Pendle's AMM. Good resources for learning more about PT-GLP include Dolomite's [Pendle-GLP Integration Page](https://docs.dolomite.io/integrations/pendle-glp), or [Pendle's Education Resources](https://app.pendle.finance/trade/education).&#x20;

YT-GLP (March 2024) token address (Arbitrum):

* 0x56051f8e46b67b4d286454995dBC6F5f3C433E34

### Asset Considerations

As YT-GLP is a rather unique token, how it interacts with Dolomite is different from other assets integrated into Dolomite. Here are a few key details necessary to understanding the integration fully:

1. **Isolation Mode Level 2**

On Dolomite's [Risk Mitigation](https://docs.dolomite.io/risk-mitigation) page, YT-GLP is listed as a Level 2 Isolation Mode asset. Level 2 Isolation Mode means that YT-GLP can contain only specific collateral assets or specific debt assets in the same position. In this case, a Borrow Position can only have  `WETH`, `DAI`, `USDC`, `USDT`, `WBTC`, and `MIM` debt.

2. **Forced Expiration**

Due to the dynamics of Pendle's GLP asset, YT-GLP decays to $0 upon maturity (March 2024) and due to this decay also has inherent negative APR. Therefore, Dolomite has a feature, "Forced Expiration," to preserve the health and solvency of markets that have a maturity such as YT-GLP. Forced Expiration is set to "TRUE" for YT-GLP, meaning the maximum position duration is the lesser of 4 weeks OR  1 week until maturity.&#x20;

3. **Negative APR**

As you might have noticed, on Dolomite YT-GLP's APR is significantly negative. Though this might seem concerning at a first glance, it is intended and accurate. As explained previously, each token enables you to earn 1 GLP's worth of yield until its maturity in March of 2024, meaning constant decay till maturity. This decay also translates to a constant decrease in value, or negative APR.&#x20;

If you wish to understand more about these considerations, visit Dolomite's [Risk Mitigation](https://docs.dolomite.io/risk-mitigation) page or Dolomite's [Pendle-GLP Integration](https://docs.dolomite.io/integrations/pendle-glp) page.

### Deposit YT-GLP into Dolomite

At the bottom of Dolomite's [Balances Page](https://app.dolomite.io/balances), click the button with the arrow located above "DEPOSIT"/"UNLOCK" and to the right of the input field, then select YT-GLP as the asset you want to deposit. Click the `Deposit`/`Unlock` button after entering the desired amount. This will initiate the wallet transaction to deposit the PT-GLP to your Dolomite Balance. After the transaction succeeds, the YT-GLP is now in your Balance, and qualifies for the first Credential, "Deposit YT-GLP into Dolomite." For more support on depositing assets to Dolomite, see the [Depositing to Dolomite Guide](https://docs.dolomite.io/guide/depositing-to-dolomite) or Dolomite's [Pendle-GLP Integration Page](https://docs.dolomite.io/integrations/pendle-glp), which has YT-GLP specific depositing information.&#x20;

<figure><img src="/files/TGAhtgIytqvw02xprzVm" alt="" width="499"><figcaption></figcaption></figure>

### Open a Borrow Position with YT-GLP

Only one Borrow Position needs to be open (for 24 hours) to qualify for this credential. One position for "Open a Borrow Position with YT-GLP" and "Borrow USDC against YT-GLP" within the same position.&#x20;

Go to the [Borrow Page](https://app.dolomite.io/borrow) and click `Open new Borrow Position` to start the Position creation process. Select YT-GLP from the popover asset selector and enter the amount desired for collateral. After selecting `Add` and confirming transaction, you are now qualified for the second Credential after holding the position open for 24 hours. However to save yourself time, don't stop at this step for 24 hours, complete the next credential now as well. See the [Borrow Guide](https://docs.dolomite.io/guide/borrow) for more borrow position support.

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

### Borrow USDC.e against YT-GLP

Locate your new Borrow Position on the page, you should see it with YT-GLP listed as collateral. Click on the Borrow Position to expand it and show additional information. Click `Manage Loan` then `Borrow` on a that Position. Confirm that USDC.e is selected in the asset selector to the right of the input field, and enter an amount to borrow (up to 67% LTV, visit [Risk Mitigation](https://docs.dolomite.io/risk-mitigation) for more info). Click the `Borrow` button after checking the inputs are correct. After a successful transaction, you are now qualified for the third credential after holding the position open for 24 hours. See the [Borrow Guide](https://docs.dolomite.io/guide/borrow) for more borrow position support.

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

Congratulations! You've completed the YT-GLP Launch Campaign and are qualified to receive 10 XP! After the 24 hour period has passed and you have claimed your XP, feel free to close the borrow position by repaying your loan (plus any interest accrued) and then withdrawing your collateral.


# GM Launch Campaign

The [GM Launch Campaign](https://galxe.com/dolomite/campaign/GChL6tTWAe) is a part of Dolomite's [Community XP](https://docs.dolomite.io/community-xp) program. The campaign awards 20 XP for achieving a series of credentials/objectives related to the GM pools integrated with Dolomite,  and borrowing and using `Zap` with them.

This campaign utilizes [Galxe](https://galxe.com/dolomite) for tracking progress and distributing XP. After all five Credentials are met on the [GM Launch Campaign](https://galxe.com/dolomite/campaign/GChL6tTWAe), you can claim an OAT representing the 20 XP. If you're new to the XP program, make sure you also go to the Dolomite Discord channel and connect your Galxe account so you can receive Discord roles that match your level.

{% hint style="info" %}
Note: GM Launch Campaign does not have a minimum asset amount necessary for any of the Credentials/Objectives.
{% endhint %}

## Credentials

> 1 – 4. **Borrow anything against each of the 4 GM assets&#x20;*****(i.e. gmARB, gmBTC, gmETH, gmLINK)***

* Each gm asset has to be Collateral within a [Borrow Position](/guide/borrow).
* Borrow *anything* against the gm asset Collateral.
* The two above requirements must be held for *at least* **24 hours**.

> 5. **Perform 3 Zaps using GM tokens**

* **No** requirements on which `Zap` type
* **No** requirements on which gm asset.

{% hint style="info" %}
There are currently `Zap` limitations within Borrow Positions for Intent Assets *(i.e. GM assets)*. The following method avoids these limitations.

* Read more about these restrictions [**here**](https://docs.dolomite.io/integrations/gmx/gm#integration-with-dolomite).
  {% endhint %}

## Example

There are many different ways to complete this Campaign. The following method is done assuming that the user has none of the gm assets within their wallet or Dolomite Balance.

* **Zap an asset to each of the four GM assets.**

<figure><img src="/files/XLzusvcjD2HpFuKVw7t9" alt="" width="563"><figcaption></figcaption></figure>

Within your Dolomite Balance, on the Balances page, select the [Swap](https://docs.dolomite.io/guide/zap#zap-swap-panel) button *(highlighted in a red box in the image above)*. Repeat this step for all four of the GM assets. These Zaps will qualify you for the fifth Credential.

* &#x20;**Create a Borrow Position with each GM asset as collateral, and borrow any asset.**

<figure><img src="/files/zRlkzepb4BTgsUuIeaBn" alt="" width="563"><figcaption><p>Create Borrow Position with gmETH as Collateral</p></figcaption></figure>

Navigate to the Borrow tab, and click the Open New Borrow Position button. Select a GM asset from the asset selector, and enter an amount in to add as collateral in the Position. Review, then click the green Add button to initiate the transaction to create the Borrow Position. After a successful transaction, you should see a new Borrow Position with that GM asset at the top of the page.&#x20;

<figure><img src="/files/JRucpVMrzC9duF8zrvJx" alt="" width="563"><figcaption><p>Borrowing USDC</p></figcaption></figure>

The next step is to borrow any asset within the Borrow Position. Navigate to Manage Loan > Borrow, as shown in the image above. Select any asset you wish from the asset selector, and enter an amount in the input box. Click the green Borrow button to initiate the transaction to borrow the asset.&#x20;

After this is done and 24 hours has passed, this Position will qualify for the GM asset Credential associated with it. Repeat these steps for each of the four gm assets.


# USDY Launch Campaign

The USDY Launch Campaign is a part of Dolomite's [Community XP](https://docs.dolomite.io/community-xp) program. The campaign awards 10 XP for achieving a series of credentials/objectives related to USDY on Dolomite. The following guide will describe how to achieve the three credentials for the USDY Launch Campaign.

This campaign utilizes [Galxe](https://galxe.com/dolomite) for tracking progress and distributing XP. After completing all of the credentials on the [USDY Launch Campaign Galxe Page](https://app.galxe.com/quest/dolomite/GCri8tkcuH), you can go to the Galxe page to claim an OAT representing the **10 XP**. If you're new to the XP program, make sure you also go to the Dolomite Discord channel and connect your Galxe account so you can receive Discord roles that match your level.

{% hint style="info" %}
This Campaign is intended to be done on the Mantle network, where the USDY token resides. This means if you wish to complete it, you mush have funds available on the Mantle network.
{% endhint %}

{% hint style="warning" %}
USDY might not be available in your region.
{% endhint %}

## Credentials <a href="#credentials" id="credentials"></a>

> 1. Get USDY

Simply have USDY in your `Dolomite Balance`.

* To do this, you can use one of two methods:
  * **Deposit** USDY to your `Dolomite Balance` from your wallet.
  * **Zap** an asset to USDY within Dolomite, adding it to your `Dolomite Balance`.

> 2. Zap your USDY

Use the `Zap` feature on Dolomite to trade *to* or *from* USDY.

* Can zap using any other asset, as long as you zap to or from USDY.
* Can utilize zap in any way, whether in a Borrow Position or in your Dolomite Balance.

> 3. Open a Borrow Position with USDY

Have USDY in a Borrow Position, either as collateral or debt.

* This Borrow Position must stay open, with USDY within the position, for at least **24 hours**.

{% hint style="info" %}
Use the following guides for any additional action-specific help:

**Depositing To Dolomite Balance:**

* <https://docs.dolomite.io/guide/depositing-to-dolomite>

**Using Zap:**

* <https://docs.dolomite.io/guide/zap>

**Opening a Borrow Position:**

* <https://docs.dolomite.io/guide/borrow#opening-a-borrow-position>
  {% endhint %}

## Example

The following steps show one method for fully completing this Campaign.&#x20;

#### Prerequisites:

For the following method, it is assumed that the wallet already has a balance of an asset on Dolomite - in this example, MNT is used. It is also assumed the wallet has MNT to pay gas fees for transactions.&#x20;

{% hint style="info" %}
This Campaign is done on the Mantle network. See the following guide for support bridging funds to Mantle, or help changing networks on the Dolomite app:

* <https://docs.dolomite.io/different-networks>
  {% endhint %}

#### 1. `Get USDY` and `Zap your USDY`

To complete both of these credentials in one action, simply `Zap` any asset into USDY within your `Dolomite Balance`.&#x20;

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

On the Balances page, select the [Swap](https://docs.dolomite.io/guide/zap#zap-swap-panel) button *(highlighted in a red box in the image above)*. After a successful transaction, you will have USDY in your Dolomite Balance, and qualify for both the `Get USDY` and `Zap your USDY` credentials.

#### 2. `Open a Borrow Position with USDY`

<figure><img src="/files/DNnJ7pGrP3tcQwo3avyx" alt="" width="563"><figcaption><p>Create Borrow Position with USDY as Collateral</p></figcaption></figure>

Navigate to the Borrow tab, and click the `Open New Borrow Position` button. Select USDY from the asset selector, and enter an amount in to add as collateral in the `Borrow Position`. Review, then click the green `Add` button to initiate the transaction. After a successful transaction, you should see a new `Borrow Position` with USDY as collateral at the top of the page.&#x20;

After your `Borrow Position` is created, you can now create a *personalized* position using the unique yield-bearing USDY asset. For example, you can borrow mETH, another yield-bearing asset with a low borrow APR, maximizing the yield potential from USDY.&#x20;

<figure><img src="/files/nAuni2ndBueUeGKholTX" alt="" width="563"><figcaption></figcaption></figure>

The above example using [Zap - Trade and deposit as collateral](https://docs.dolomite.io/guide/zap#trade-and-deposit-as-collateral) loops mETH for roughly a **5x** leveraged position. This utilizes the difference in APR between USDY's Supply APR *(8.5%)* and mETH's Borrow APR *(5%)*. By looping in one-click, we have nearly doubled the USDY APR, and earn 2.5 times as many Dolomite Minerals as would've earned just simply holding USDY.

<figure><img src="/files/IsO8Hv8y9lt3oJ9LEn6r" alt="" width="563"><figcaption><p>Created using the "Image" feature at the top of the <code>Borrow Position</code></p></figcaption></figure>

Now that we are finished personalized the Borrow Position utilizing USDY, this position will qualify for the `Open a Borrow Position with USDY` after 24 hours has passed.


# mETH Launch Campaign

The mETH Launch Campaign is a part of Dolomite's [Community XP](https://docs.dolomite.io/community-xp) program. The campaign awards 10 XP for achieving a series of credentials/objectives related to mETH on Dolomite. The following guide will describe how to achieve the three credentials for the mETH Launch Campaign.

This campaign utilizes [Galxe](https://galxe.com/dolomite) for tracking progress and distributing XP. After completing all of the credentials on the [mETH Launch Campaign Galxe Page](https://app.galxe.com/quest/dolomite/GCrY8tkqmc), you can go to the Galxe page to claim an OAT representing the **10 XP**. If you're new to the XP program, make sure you also go to the Dolomite Discord channel and connect your Galxe account so you can receive Discord roles that match your level.

{% hint style="info" %}
This Campaign is intended to be done on the Mantle network, where the mETH token resides. This means if you wish to complete it, you mush have funds available on the Mantle network.
{% endhint %}

## Credentials <a href="#credentials" id="credentials"></a>

> 1. **Get mETH**

Simply have mETH in your `Dolomite Balance`.

* This can be done by either:
  * **Deposit** mETH to your `Dolomite Balance` *(i.e. Wallet -> Dolomite Balance)*.
  * **Zap** an asset to mETH within Dolomite, adding it to your `Dolomite Balance` *(i.e. Dolomite Balance Asset -> mETH)*.

> 2. **Zap your mETH**

Use the `Zap` feature on Dolomite to trade *to* or *from* mETH.

* **No** requirements on which asset is traded *to* or *from* mETH.
* **No** requirements on which `Zap` type.

> 3. **Open a Borrow Position with mETH**

Have mETH in a Borrow Position, either as collateral or debt.

* This Borrow Position must open, with mETH within the position, for *at least* **24 hours**.
* If you use mETH as collateral, you have to borrow an asset. Any borrowed asset will qualify.

{% hint style="info" %}
Use the following guides for any additional action-specific help:

**Depositing To Dolomite Balance:**

* <https://docs.dolomite.io/guide/depositing-to-dolomite>

**Using Zap:**

* <https://docs.dolomite.io/guide/zap>

**Opening a Borrow Position:**

* <https://docs.dolomite.io/guide/borrow#opening-a-borrow-position>
  {% endhint %}

## Example

The following steps is one method for fully completing this Campaign.&#x20;

#### Prerequisites:

For the following method, it is assumed that the wallet already has an integrated asset within their Dolomite Balance on the Mantle network. It is also assumed the wallet has MNT to pay gas fees for transactions.&#x20;

{% hint style="info" %}
This Campaign is done on the Mantle network. See the following guide for support bridging funds to Mantle, or help changing networks on the Dolomite app:

* <https://docs.dolomite.io/different-networks>
  {% endhint %}

#### 1. `Get mETH` and `Zap your mETH`

To complete both of these credentials in one action, simply `Zap` any asset into mETH within your `Dolomite Balance`.&#x20;

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

Within your Dolomite Balance, on the Balances page, select the [Swap](https://docs.dolomite.io/guide/zap#zap-swap-panel) button *(highlighted in a red box in the image above)*. After a successful transaction, you will have mETH in your Dolomite Balance, and qualify for both the `Get mETH` and `Zap your mETH` credentials.

#### 2. `Open a Borrow Position with mETH`

<figure><img src="/files/0A1liWezYEpKv6GYLP2X" alt=""><figcaption><p>Create Borrow Position with mETH as Collateral</p></figcaption></figure>

Navigate to the Borrow tab, and click the `Open New Borrow Position` button. Select mETH from the asset selector, and enter an amount in to add as collateral in the `Borrow Position`. Review, then click the green `Add` button to initiate the transaction. After a successful transaction, you should see a new `Borrow Position` with mETH as collateral at the top of the page.&#x20;

After your `Borrow Position` is created, you can now create a *personalized* position using the unique yield-bearing mETH asset. For the following example modification to the Borrow Position, we will be sacrificing APR, in order to leverage the speculative side of mETH.&#x20;

<figure><img src="/files/ZyrO8aD4z9Oryki4lulc" alt="" width="391"><figcaption></figcaption></figure>

If we hover over mETH on the Balances page, we notice that on top of the Dolomite Lending APR and ETH Staking APR *(2.95% combined)*, we are earning all sorts of additional speculative rewards. These include rewards from Mantle, EigenLayer, and Dolomite itself. If we perhaps want to speculate that these rewards might have value in the future, we can utilize Dolomite's unique features to "one-click loop" our mETH `Borrow Position` in order to multiply our future rewards.&#x20;

<figure><img src="/files/N4uiGOGnFu5ur41sXNPr" alt="" width="532"><figcaption></figcaption></figure>

The above example using [Zap - Trade and deposit as collateral](https://docs.dolomite.io/guide/zap#trade-and-deposit-as-collateral) loops ETH for roughly a **5x** leveraged position. This utilizes the the nature of mETH's price being a function of ETH's price, meaning they share extremely similar changes in price. If the price of ETH goes down, so will mETH. This makes our Borrow Position *Delta Neutral*, which will keep our Borrow Position Health the same regardless of changes in ETH's price. By looping in one-click, we have multiplied our rewards by **5 times** the amount we would've earned just simply holding the mETH *(i.e. $0.4 worth -> $2 worth)*, as shown in the image below.

Now that we are finished personalized the Borrow Position utilizing mETH, this Position will qualify for the `Open a Borrow Position with mETH` after 24 hours has passed.


# Guide To Level 4

A brief guide on obtaining Level 4 in Dolomite's Community XP Program.

In order to receive accelerated oARB vesting for the oARB Incentives Program, a user must have achieved at least Level 4 in Dolomite's [Community XP Program](https://docs.dolomite.io/community-xp). The accelerated oARB vesting increases the speed at which oARB vests by 50%. With such an appealing incentive, many new users will want to achieve Level 4, yet might not know where to start. This is a guide for both new and current users to achieve Level 4 efficiently.

### Where To Start

To begin your journey collecting XP, click on the level icon (i.e. LVL 0) at the top right of the Dolomite application, next to your wallet address and ETH balance. This will bring you to the Rewards page, a page presenting the [Dolomite XP Program](https://docs.dolomite.io/community-xp). There are three categories from which to obtain XP: **Social**, **Special**, and **Milestone**.&#x20;

<figure><img src="/files/vXbObkjizLoy3ykPRjxE" alt=""><figcaption><p>Community XP Program</p></figcaption></figure>

#### Social

Campaigns in this section include Twitter Spaces and AMAs Dolomite holds or attends, as well as off-chain campaigns such as Rock Climbing 101. If there is an upcoming AMA or Space that rewards participants with XP, it will be present in "Active Campaigns." Rock Climbing 101 is a 10 XP, beginner-friendly campaign, that introduces new users to Dolomite's learning resources as well as the founders.&#x20;

#### Special

These Campaigns specialize in a functionality or asset on Dolomite. They will typically have the user complete a series of correlated tasks (i.e. "Open a Borrow Position with PT-GLP") with that asset or functionality in mind. At the time of writing, there are currently 7 Special Campaigns, or 70 XP up for grabs.&#x20;

#### Milestones

The Milestones section rewards user activity on Dolomite with XP. The features rewarding XP include, **Zaps**, **Borrow Time**, and **Borrow Positions**. The more the user makes use of these three features, the more XP they are rewarded. The first stage of each feature is completely manageable for a new user, requiring 10 Zaps, 150 hours of Borrow Time (i.e. a Borrow Position open for about a week), and opening 5 Borrow Positions.

### Gathering XP

With a good grasp of what the Dolomite Community XP Program is, you are now ready to begin gathering XP. The following section will provide all the different active Campaigns a new user can complete in order to obtain **100 XP**, or Level 4 in the XP Program.&#x20;

The following list of Campaigns will be in order of practicality and user-ease to complete. Unless a prerequisite is stated, however, the Campaigns can realistically be completed in whatever order you wish. Depending on when this is read, there may be more opportunities present to obtain XP along with the list below, such as active Social Campaigns under the Social category. In terms of time, an ambitious community member can achieve Level 4 in 1-2 days minimum.&#x20;

#### 1. Rock Climbing 101 - 10 XP

Rock Climbing 101 provides an introduction to Dolomite's resources and founders. This is the recommended starting place for beginners since it provides resources for help, and allows the user to get familiar with Galxe as a medium for obtaining XP. It is also a prerequisite to the following Special Campaign, Tour de Dolomite.&#x20;

* Links: [Social Category](https://app.dolomite.io/achievements/social); [Galxe Campaign](https://galxe.com/dolomite/campaign/GCr6rUVYCN)

#### 2. Tour de Dolomite - 10 XP

Tour de Dolomite is a simple and introductory Special Campaign, allowing the user to test basic the functionality of Dolomite. The Campaign has four Credentials, or objectives to complete, including Complete Rock Climbing 101 (above), Deposit $10 into Dolomite, Open a Borrow Position, and Perform a Zap. These functions, depositing, opening a Borrow Position, and Zapping, are all methods that will be utilized in other Special Campaigns and Milestones.&#x20;

* Links: [Special Category](https://app.dolomite.io/achievements/special); [Galxe Campaign](https://galxe.com/dolomite/campaign/GCdDBUPE2r)
* Guides: [Deposit Guide](https://docs.dolomite.io/guide/depositing-to-dolomite); [Borrow Guide](https://docs.dolomite.io/guide/borrow); [Zap Guide](https://docs.dolomite.io/guide/zap)

#### 3. Zap your ETH! - 10 XP

This Special Campaign rewards 10 XP for Zapping ETH to rETH and wstETH within Borrow Positions. The goal of this Campaign, is to have the participant try out Zap features that allow a user to create an example personalized strategy for two ETH derived yield assets. This Campaign has no time requirements or minimum asset amount requirement and is relatively simple to complete. The Campaign Guide for it is linked below.&#x20;

* Links: [Special Category](https://app.dolomite.io/achievements/special); [Galxe Campaign](https://galxe.com/dolomite/campaign/GC5yZU7KTq)
* Guides: [Campaign Guide](https://docs.dolomite.io/campaign-guides/zap-your-eth-campaign); [Borrow Guide](https://docs.dolomite.io/guide/borrow); [Zap Guide](https://docs.dolomite.io/guide/zap)

#### 4. jUSDC Launch Campaign - 10 XP

The jUSDC Launch Campaign has users deposit [JonesDAO's](https://www.jonesdao.io/) jUSDC into Dolomite, open a Borrow Position with jUSDC, and borrow USDC.e against it. This relatively simple Campaign, has the complexity of obtaining and depositing jUSDC into Dolomite, opening a Borrow Position, and borrowing USDC.e against the jUSDC collateral. The Borrow Position will need to be open for at least 24 hours to complete the associated Credentials.  This Campaign has no minimum asset amount requirement. The Campaign Guide for it is linked below.&#x20;

* Links: [Special Category](https://app.dolomite.io/achievements/special); [Galxe Campaign](https://galxe.com/dolomite/campaign/GCuQ5USe12)
* Guides: [Campaign Guide](https://docs.dolomite.io/campaign-guides/jusdc-launch-campaign); [Deposit Guide](https://docs.dolomite.io/guide/depositing-to-dolomite); [Borrow Guide](https://docs.dolomite.io/guide/borrow)

#### 5. MIM Launch Campaign - 10 XP

The MIM Launch Campaign has users deposit Abracadabra's "MIM" into Dolomite and borrow MIM against mGLP. The position borrowing MIM against mGLP needs to be open for at least 24 hours to qualify for the Credential. This Campaign has no minimum asset amount requirement.&#x20;

* Links: [Special Category](https://app.dolomite.io/achievements/special); [Galxe Campaign](https://galxe.com/dolomite/campaign/GC2uxUjEgj)
* Guides: [Campaign Guide](https://docs.dolomite.io/campaign-guides/mim-launch-campaign); [Deposit Guide](https://docs.dolomite.io/guide/depositing-to-dolomite); [Borrow Guide](https://docs.dolomite.io/guide/borrow)

#### 6. GMX Launch Campaign - 10 XP

This Special Campaign rewards 10 XP for depositing GMX into your Dolomite Balance, and borrowing anything against the GMX asset. The position borrowing anything against GMX needs to be open for at least 24 hours to qualify for the Credential. This Campaign has no minimum asset amount requirement.

* Links: [Special Category](https://app.dolomite.io/achievements/special); [Galxe Campaign](https://app.galxe.com/quest/dolomite/GCJZEttm9T)
* Guides: [Borrow Guide](https://docs.dolomite.io/guide/borrow); [Zap Guide](https://docs.dolomite.io/guide/zap)

#### 7. GM Launch Campaign - 20 XP

This Special Campaign rewards 20 XP for borrowing anything against each GM asset, while also using `Zap` with any of the four Gm assets three times. The positions borrowing anything against the GM assets need to be open for at least 24 hours to qualify for the Credential. The GM assets are Intent, Collateral-Only, and Isolation mode, meaning there are restrictions to what can be borrowed, and which Zaps are available. See more about these restrictions in the [GM Campaign Guide](https://docs.dolomite.io/campaign-guides/gm-launch-campaign) or the [Integration doc](https://docs.dolomite.io/integrations/gmx/gm). This Campaign has no minimum asset amount requirement.

* Links: Links: [Special Category](https://app.dolomite.io/achievements/special); [Galxe Campaign](https://galxe.com/dolomite/campaign/GChL6tTWAe)
* Guides: [Campaign Guide](https://docs.dolomite.io/campaign-guides/gm-launch-campaign); [Borrow Guide](https://docs.dolomite.io/guide/borrow); [Zap Guide](https://docs.dolomite.io/guide/zap)

#### 8. Zap your GLP! - 10 XP

This Special Campaign rewards 10 XP for Zapping to or from GLP, plvGLP, PT-GLP, mGLP within a Borrow Position. The goal of this Campaign, is to have the participant try out Zap features that allow a user to create an example personalized strategy for three GLP derived yield assets. This Campaign has no time requirements or minimum asset amount requirement, however the targeted assets have varying [Isolation Mode](https://docs.dolomite.io/risk-mitigation#isolation-mode) levels which increases the difficulty. The Campaign Guide for it is linked below.&#x20;

* Links: [Special Category](https://app.dolomite.io/achievements/special); [Galxe Campaign](https://galxe.com/dolomite/campaign/GC7bZU7gcC)
* Guides: [Campaign Guide](https://docs.dolomite.io/campaign-guides/zap-your-glp-campaign); [Borrow Guide](https://docs.dolomite.io/guide/borrow); [Zap Guide](https://docs.dolomite.io/guide/zap)

#### 9. Milestone | Zaps (LVL 1) - 10 XP

This milestone requires 10 Zaps done on Dolomite. If you have completed some or all of the above Campaigns, you likely have already completed the first level of this Milestone. If you have achieved this, the "10XP" on the Zaps milestone will appear green and have a sparkle effect. Click on it, or follow the link below, to visit the correlated Galxe Campaign to claim the XP. If completing the above campaigns hasn't gotten you to 10 zaps, use the knowledge from those campaigns to zap a few more times to hit the 10 zaps required for this milestone.

* Links: [Milestone Category](https://app.dolomite.io/achievements/milestones);[ Galxe Campaign](https://galxe.com/dolomite/campaign/GCsHPUFnJX); [Zap Guide](https://docs.dolomite.io/guide/zap)

#### 10. Milestone | Borrow Time (LVL 1) - 10 XP

This milestone requires 150 hours of borrow time done on Dolomite. This is roughly one week of borrow time. Borrow time counts for this Milestone if a user has one or more Borrow Positions open. If you are a new user to Dolomite, it is unlikely you have achieved 150 hours of borrow time, but if you have achieved this, the "10XP" on the Zaps Timeline will appear green and have a sparkle effect. Click on it, or follow the link below, to visit the correlated Galxe Campaign to claim the XP. As long as you have at least one Borrow Position open you will make progress towards this milestone, so if you haven't yet hit this milestone it is just a matter of waiting.

* Links: [Milestone Category](https://app.dolomite.io/achievements/milestones); [Galxe Campaign](https://galxe.com/dolomite/campaign/GCnPkUA6C8)

#### 11. Milestone | Borrow Positions (LVL 1) - 10 XP

This milestone requires a user to have created 5 Borrow Positions on Dolomite. If you have completed some or all of the above Campaigns, you likely have already completed the first level of this milestone. If you have achieved this, the "10XP" on the Zaps Timeline will appear green and have a sparkle effect. Click on it, or follow the link below, to visit the correlated Galxe Campaign to claim the XP.&#x20;

* Links: [Milestone Category](https://app.dolomite.io/achievements/milestones); [Galxe Campaign](https://galxe.com/dolomite/campaign/GCJhdUA8qc)

🎉 Congratulations in achieving this Level 4! You can find the Rewards page below to start your oARB vesting, along with the oARB Incentives Program document if you wish to read more.&#x20;

* [Rewards Page](https://app.dolomite.io/rewards)
* [oARB Incentives Program Information](https://docs.dolomite.io/oarb-incentives-program)


# Integrations

Dolomite's modular infrastructure paves the way for unique and cooperative integrations with other DeFi protocols.

As DeFi has evolved since its inception in 2019, the idea of locking liquidity in a protocol to accrue rewards has become increasingly popular as well as increasingly more complex. Unfortunately, this paradigm of keeping liquidity siloed in another protocol is generally at-odds with money market systems, because it makes interacting with that equity (and the rewards + voting capabilities) non-standardized and non-trivial.

Dolomite was designed to make native integrations with other DeFi protocols as seamless as possible. Dolomite's protocol was designed to integrate with virtually any form of valid equity while allowing users to retain control and access over the rewards they accrue. The possibilities are limitless but some examples include:

* Staked LP tokens
  * [GMX](https://gmx.io)'s GLP
  * [Camelot](https://camelot.exchange/)'s spNFTs for yield farming
  * [Sushi](https://www.sushi.com/)'s staked LP tokens (these aren't even tokenized!)
  * [Vela](https://www.vela.exchange/)'s VLP
* Vault tokens
  * [Umami](https://umami.finance/)'s delta-neutral USDC vault
  * [Plutus DAO](https://plutusdao.io/)'s plvGLP
  * [Jones DAO](https://www.jonesdao.io/)'s jUSDC
  * [Abracadabra](https://abracadabra.money/)'s magicGLP
* Options Vaults
  * [Premia](https://premia.finance/)'s smart vaults
  * [Lyra](https://lyra.finance)'s cash-collateralized vaults
* Gamified DeFi Programs
  * [Across Protocol's](https://across.to/) [Reward Locking](https://docs.across.to/how-to-use-across/rewards/reward-locking) for pooled tokens
* And much more...

> Note, these examples include protocols that are currently not integrated into Dolomite.

As a bonus, since users are able to retain direct control over assets Dolomite integrates, users are able to perform on-chain voting (if supported by the respective protocol) with the assets they deposit into Dolomite.


# Berachain - Proof of Liquidity

This section outlines our integration of Proof of Liquidity on Berachain, the mechanics behind it and the opportunities it provides for position design.

### What is Proof of Liquidity (PoL)?

Proof of Liquidity (PoL) is an innovative consensus mechanism implemented on Berachain. It is designed to enhance on-chain security by aligning the incentives of all participants and increasing the amount of liquidity deployed within decentralized applications (dApps). Inspired by Proof-of-Stake (PoS), PoL introduces an additional governance token, the Berachain Governance Token ($BGT), which separates the responsibilities of gas and security tokens from governance and rewards tokens.

* **Gas Token**: $BERA
* **Governance Token**: $BGT (soulbound and non-transferable)

Participants in PoL earn rewards by providing liquidity to the chain, which is then staked in governed reward vaults. These vaults are integral to the functioning and security of Berachain’s ecosystem.

### Dolomite’s Dynamic Collateral

Dynamic Collateral refers to assets that can perform multiple functions while being used as collateral. For instance, staking, voting, and delegation are supported even when assets are locked in a lending position. Dolomite’s integration of dynamic collateral ensures users retain control over their assets’ utility while unlocking additional yield opportunities.

Dynamic Collateral enables:

* Staking assets while using them as collateral.
* Borrowing against staked assets to amplify yields.
* Unlocking liquidity without sacrificing participation in staking and governance.

### How Dolomite Supports Proof of Liquidity

Dolomite’s integration with Berachain’s PoL system allows users to maximize the value of their assets through staking, borrowing, and earning rewards seamlessly. Key features include:

#### 1. Reward Vault Staking

* Users can deposit PoL-eligible assets through Dolomite’s interface.
* Deposits are automatically moved to a PoL Reward Vault managed by the selected PoL provider.
* Users secure the Berachain network, earn PoL rewards, and utilize the underlying collateral value in borrow positions.

#### 2. PoL Tokens

PoL Tokens represent staked positions in the Berachain PoL system. These tokens:

* Appear in Dolomite Balances.
* Can be used as collateral for borrow positions.

#### 3. PoL Providers

Dolomite offers flexibility in choosing a PoL provider. Initial providers include:

**a. BGT Station**

* Users earn $BGT rewards, which can be delegated to validators for additional incentives.
* $BGT can also be moved into borrow positions as collateral.

**b. Infrared**

* Provides $iBGT rewards (a liquid version of $BGT).
* $iBGT can be staked into $siBGT to accrue validator rewards.
* $siBGT can be used as dynamic collateral for borrowing.

**c. BGT Market**

* Enables decentralized Dutch auctions for $BGT.
* Offers proxy-delegation of $BGT to validators.
* Allows 1:1 redemption of $BGT to $BERA.

#### 4. D Tokens

Dolomite’s D Tokens are ERC-4626-compliant vault wrappers that enable seamless integration with other DeFi protocols. These tokens:

* Represent balances in Dolomite accounts (e.g., dUSDC, dETH).
* Can be deposited directly into PoL providers for rewards.

#### 5. Leveraged Farming

Dolomite allows users to:

1. Deposit PoL-eligible assets.
2. Convert them into PoL Tokens.
3. Use PoL Tokens as collateral to borrow additional assets.
4. Loop the process up to 5-7x leverage for higher yields.

#### 6. Automatic E-Mode

Automatic E-Mode dynamically adjusts Loan-to-Value (LTV) ratios based on correlated price exposure. This feature enables higher leverage while ensuring risk is managed appropriately.

### Benefits of Dolomite’s PoL Integration

Dolomite’s integration with Berachain’s PoL system offers numerous advantages:

* **Enhanced Capital Efficiency**: Users can stake and borrow against assets simultaneously.
* **Flexible Provider Selection**: Multiple PoL providers allow customization.
* **Dynamic Collateral**: Unlocks the full potential of staked assets.
* **User-Friendly Interfaces**: Simplifies complex financial strategies.
* **High Yield Opportunities**: Maximizes rewards through leveraged farming and validator incentives.

### Conclusion

Dolomite’s integration with Berachain’s Proof of Liquidity redefines the DeFi experience by merging staking, borrowing, and governance into a seamless, efficient ecosystem. Users can now contribute to network security, optimize their yield, and unlock the full potential of their assets with intuitive tools and advanced features. This transformative approach positions Dolomite as a leader in capital efficiency and innovation within the DeFi space.

***

**Helpful Links:**

* [Berachain Documentation](https://docs.berachain.com/learn/)
* [BGT Station Documentation](https://docs.berachain.com/learn/dapps/bgt-station)
* [Infrared Documentation](https://infrared.finance/docs)
* [Dolomite Documentation](https://docs.dolomite.io/)


# GMX

This page links to the different integrations Dolomite has with the GMX ecosystem

* Learn more about [GMX](/integrations/gmx/gmx) on Dolomite
* Learn more about [GLP](/integrations/gmx/glp) on Dolomite
* Learn more about [GM](/integrations/gmx/gm) on Dolomite


# GMX

All about GMX, its integration with Dolomite, and what makes it special for GMX holders.

## Overview

GMX is the utility and governance token token for the perpetual exchange [GMX](https://gmx.io/#/).&#x20;

#### GMX Token Address[​](https://docs.gmx.io/docs/tokenomics/gmx-token#gmx-token-address) <a href="#gmx-token-address" id="gmx-token-address"></a>

* Arbitrum: [0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a](https://arbiscan.io/token/0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a)
* Avalanche: [0x62edc0692BD897D2295872a9FFCac5425011c661](https://snowtrace.io/address/0x62edc0692BD897D2295872a9FFCac5425011c661)

{% hint style="info" %}
The prior information was taken from GMX's [Gitbook](https://docs.gmx.io/docs/tokenomics/gmx-token). If you notice any of the information is out of date or incorrect, please let us know.
{% endhint %}

### Integration with Dolomite

Dolomite's integration with the GMX ecosystem exemplifies Dolomite's modularity and positioning as a public utility for other protocols to utilize. First and foremost, Dolomite's protocol does **not** take any fees from anything earned in the GMX ecosystem, **instead passing all rewards on to the user**. This includes:

* ETH rewards
* esGMX rewards
* Multiplier points
* Vesting rewards
* Any other staking or fee-based rewards

## Depositing GMX into Dolomite

Once you have GMX in your wallet, you may deposit it into Dolomite via the `Balances` page. To deposit it, locate the plus icon *(i.e ⊕)*, to the right of GMX and the **In Wallet** column *(shown below)*.

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

{% hint style="warning" %}
If you want to perform a full account transfer, you must do it before depositing GMX or GLP to Dolomite. If you deposit GMX or GLP into your account first, the full account transfer feature will be permanently unavailable for the wallet you were using when you made the deposit.

Currently account transfers off of Dolomite are not supported, so only use this feature if you plan to continue to use Dolomite to accrue or redeem GMX rewards.
{% endhint %}

Note, if it is your first time depositing, you will have to unlock GMX first. Once your GMX is deposited, you will be able to interact with the GMX rewards ecosystem, the same way you would normally from GMX's web application!

{% hint style="info" %}
Depositing special assets like GMX into Dolomite results in the creation of your proxy vault. This all happens behind the scenes and occurs for each unique wallet that chooses to deposit GMX.&#x20;

This proxy vault debits your Dolomite Balance and gives you access to GMX virtual liquidity for use across Dolomite's various features. The proxy vault is created when you perform your first deposit or initiate a full account transfer from GMX into Dolomite.
{% endhint %}

## Compound or Claim Asset Rewards

The different rewards options can be accessed by clicking to expand the GMX row on the `Balances` page if it isn't expanded already:

<figure><img src="/files/3h8Q4WYE98JqgIDn5VEX" alt=""><figcaption></figcaption></figure>

Clicking on the `Asset Rewards` button will take you to the `Asset Rewards` panel (shown below), which was made to resemble the GMX *Total Rewards* panel.

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

<figure><img src="/files/JW5zGw9Xg9Xr23zyb7eg" alt=""><figcaption><p>The GMX rewards interface</p></figcaption></figure>

One change that was made to Dolomite's version of compounding or claiming rewards for the integration is allowing you to deposit the earned WETH rewards into your Dolomite account. Unchecking this box will send the rewards to your wallet instead.

To learn more about claiming and compounding, please read about it in the [GMX documentation](https://gmxio.gitbook.io/gmx/rewards#compounding-vs-claiming).

{% hint style="info" %}
The top 4 rows show you aggregate data of how much GLP, staked-GMX, and esGMX you have in your vault. This makes it convenient to see how much total GLP (or other assets) is deposited across your Dolomite Balances, borrow positions, or in any other Dolomite service.
{% endhint %}

{% hint style="success" %}
You earn GLP rewards and yield for your entire deposit on Dolomite. Even if your GLP is spread across various Dolomite services, you're still earning based on the total amount of GLP deposited in your vault.
{% endhint %}

## Stake GMX and esGMX

Staking and unstaking GMX and esGMX can be done from clicking the `Staking` button on the GLP row. Pressing the button will open the following modal:

<figure><img src="/files/NFp6wjLAA1FaykxYG4VM" alt=""><figcaption><p>The staking panel for GMX and esGMX</p></figcaption></figure>

To learn how how boosting and multiplier points work, please read the corresponding section in the [GMX documentation](https://gmxio.gitbook.io/gmx/rewards#multiplier-points).

Staking esGMX always pulls the tokens from your proxy vault and *never* from your wallet. Since esGMX is non-transferrable, the esGMX tokens can only ever be used in the following places:

1. Held in the proxy vault as esGMX
2. Staked from the proxy vault, which shows in the vault as sbfGMX tokens
3. Vested from the proxy vault, which shows in the vault as vGMX or vGLP tokens (more on this below)

No token approvals are needed to move esGMX into staking or vesting. Note, esGMX can *technically*, be transferred by initiating a full account transfer (more on this below).

## Vest esGMX

New GMX tokens are introduced into circulation by vesting esGMX into GMX tokens. By default, all esGMX you own can be converted into GMX over the course of one year by initiating the vesting process with your staked GMX or GLP tokens.

To get started, click on the `Vesting` button from the GLP row to open the following modal:

<figure><img src="/files/ebrXZbOSc0UpuChnsKbL" alt=""><figcaption><p>The vesting panel for converting esGMX into GMX</p></figcaption></figure>

The mechanics for vesting esGMX into GMX work exactly the same as the GMX interface. To learn more about how vesting works, please read the following section from the [GMX documentation](https://gmxio.gitbook.io/gmx/rewards#vesting).

Importantly, any GMX tokens you use for vesting do not impact your virtual balances, borrow positions, or any other area on Dolomite that utilizes your virtual liquidity. Meaning, you can actively borrow against your GMX while you're using it to vest your esGMX into GMX without any limitations.

> Note, if your GMX gets liquidated in any position, you may be forced to unvest your GMX that's converting esGMX into GMX before it's seized by the liquidator. This should only happen if the amount of GMX held in your proxy vault is not enough to cover the debt owed against the position that is underwater.

## Full Account Transfers

Dolomite is the first protocol to offer support for full account transfers into a money market protocol. Full account transfers allow the sender to transfer all of their esGMX, staked multiplier points, GLP and staked GMX to another account while not losing any of those accumulated rewards. It's an important feature to allow long-term GMX protocol users to transfer funds while not being penalized by breaking their streak.

{% hint style="warning" %}
Full account transfers can only be executed into Dolomite once per wallet address. They cannot be performed into Dolomite if you've already deposited GMX or GLP into Dolomite for the same wallet address. If you've already deposited GMX or GLP into Dolomite for the same wallet address, you'll need to do a full account transfer into Dolomite using a different wallet address.

Dolomite does not currently support transfers out of Dolomite to external addresses but may or may not add that feature at a later time.
{% endhint %}

Executing a full account transfer is a two-transaction process that requires you to start on GMX's website and finish on Dolomite:

1. Click the `Transfer Account` button the GLP row to open the `Transfer Account` panel.
2. With the panel open, copy the `Receiver Address` to your clipboard. You'll need this on GMX's website.
3. On the `Transfer Account` page on GMX's website, paste the `Receiver Address` you just copied into the input field. Click `Begin Transfer` and confirm the transaction from your wallet. This is the first transaction (of 2 total).
4. Go back to Dolomite and open the `Transfer Account` panel again. Enter your wallet address as the `Sender Address`. Your wallet address can be copied to your clipboard by opening Metamask and clicking on your wallet from the top-middle toolbar of the extension .Click `Finalize Transfer` and confirm the transaction from your wallet. This is the second and final transaction.

<figure><img src="/files/PKens4bNU5FdY1FuiP1l" alt=""><figcaption><p>The Transfer Account panel on Dolomite</p></figcaption></figure>

<figure><img src="/files/qquYb3FpRJh2ZF5tT12u" alt=""><figcaption><p>The Transfer Account page on GMX</p></figcaption></figure>

Please keep in mind that transferring an account requires a number of conditions to be met prior to the transfer executing. These include:

* The sender has no GMX being used to vest esGMX into GMX
* The sender has no GLP being used to vest esGMX into GMX.
* The receiver has not staked GMX tokens before
* The receiver has not staked GLP tokens before

If any of these conditions does not pass, you won't be able to execute the transfer. As shown in the Transfer Account image above from the Dolomite interface, any failing conditions will be shown with an ![](/files/QYjJeoa8vZOMZE9DZHLg)next to it to make the error more clear to you.

## Risk

GMX is not a borrowable asset and is permanently in [Isolation Mode](/risk-management#isolation-mode). You can learn more about the other risk parameters by visiting the [Risk Mitigation](/risk-management) page.

## Price Oracle

The GMX oracle implementation can be seen on this [page](broken://pages/9ZCQbnUDHv1LjcbbQePQ), which accounts for the PnL of positions being underwritten by GMX and marks the value of the collateral using Chainlink.

## Liquidations

Getting liquidated for any GMX you have in a borrow position will result in the GMX you hold being seized by the liquidator and sold off using the normal collateral calculations, as explained in [Liquidations](/risk-management#liquidations). Importantly, only the GMX is seized though. All esGMX, multiplier points, ETH rewards, etc. are kept in your vault and are never taken by the liquidator under any circumstance.

> Dolomite never takes your rewards when a complex collateral asset is liquidated. Only the collateral asset is ever taken.

## Fees

There are **no special fees** for using your GLP or GMX tokens on Dolomite. You keep 100% of the ETH rewards, multiplier points, staking rewards, esGMX, and vesting.&#x20;

On a fundamental level, we believe users, institutions, and protocols that want to run their own strategies shouldn't be hampered by Dolomite cutting into their strategy's viability by taking a portion of the rewards on a protocol-level.


# GLP

All about GLP, its integration with Dolomite, and what makes it special for GLP holders.

## Overview

GLP is the GMX platform's liquidity token. It consists of an index of assets used for swaps and leverage trading. It can be minted using any index asset and burnt to redeem any index asset. The price for minting and redemption is calculated based on the following formula:

`(total worth of assets in index including profits and losses of open positions) / (GLP supply)`

On Arbitrum, holders of the GLP token earn [Escrowed GMX rewards](https://gmxio.gitbook.io/gmx/rewards) and 70% of platform fees distributed in ETH. Note that the fees distributed are based on the number after deducting [referral rewards](https://gmxio.gitbook.io/gmx/referrals) and the network costs of [keepers](https://gmx-io.notion.site/gmx-io/GMX-Technical-Overview-47fc5ed832e243afb9e97e8a4a036353), keeper costs are usually around 1% of the total fees.

Staked GLP token address (Arbitrum): [0x1aDDD80E6039594eE970E5872D247bf0414C8903](https://arbiscan.io/token/0x1aDDD80E6039594eE970E5872D247bf0414C8903)

{% hint style="info" %}
The prior information was taken from GMX's [Gitbook](https://gmxio.gitbook.io/gmx/glp). If you notice any of the information is out of date or incorrect, please let us know.
{% endhint %}

### Integration with Dolomite

Dolomite's integration with the GMX ecosystem exemplifies Dolomite's modularity and positioning as a public utility for other protocols to utilize. First and foremost, Dolomite's protocol does **not** take any fees from anything earned in the GMX ecosystem, **instead passing all rewards on to the user**. This includes:

* ETH rewards
* esGMX rewards
* Multiplier points
* Vesting rewards
* Any other staking or fee-based rewards

## Depositing GLP into Dolomite

Once you have GLP in your wallet, you may deposit it into Dolomite via the `Balances` page. To deposit it, locate the plus icon *(i.e ⊕)*, to the right of GLP and the **In Wallet** column *(shown below)*.

{% hint style="warning" %}
If you want to perform a full account transfer, you must do it before depositing GLP to Dolomite. If you deposit GLP into your account first, the full account transfer feature will be permanently unavailable for the wallet you were using when you made the deposit.

Currently account transfers off of Dolomite are not supported, so only use this feature if you plan to continue to use Dolomite to accrue or redeem GMX rewards.
{% endhint %}

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

Note, if it is your first time depositing, you will have to unlock GLP first. Once your GLP is deposited, you will be able to interact with the GMX rewards ecosystem, the same way you would normally from GMX's web application!

{% hint style="info" %}
Depositing special assets like GLP into Dolomite results in the creation of your proxy vault. This all happens behind the scenes and occurs for each unique wallet that chooses to deposit GLP.&#x20;

This proxy vault debits your Dolomite balance and gives you access to GLP virtual liquidity for use across Dolomite's various features. The proxy vault is created when you perform your first deposit or initiate a full account transfer from GMX into Dolomite.
{% endhint %}

## Compound or Claim Asset Rewards

The different rewards options can be accessed by clicking to expand the GLP row on the `Balances` page if it isn't expanded already:

<figure><img src="/files/1lKEXg7d5mQpFeT654hO" alt=""><figcaption></figcaption></figure>

Clicking on the `Asset Rewards` button will take you to the `Asset Rewards` panel (shown below), which was made to resemble the GMX *Total Rewards* panel.

<figure><img src="/files/Edn9ckW4iShm4HrcifNQ" alt=""><figcaption><p>The Asset Rewards panel on Dolomite</p></figcaption></figure>

<figure><img src="/files/JW5zGw9Xg9Xr23zyb7eg" alt=""><figcaption><p>The GMX rewards interface</p></figcaption></figure>

One change that was made to Dolomite's version of compounding or claiming rewards for the integration is allowing you to deposit the earned WETH rewards into your Dolomite account. Unchecking this box will send the rewards to your wallet instead.

To learn more about claiming and compounding, please read about it in the [GMX documentation](https://gmxio.gitbook.io/gmx/rewards#compounding-vs-claiming).

{% hint style="info" %}
The top 4 rows show you aggregate data of how much GLP, staked-GMX, and esGMX you have in your vault. This makes it convenient to see how much total GLP (or other assets) is deposited across your Dolomite Balances, borrow positions, or in any other Dolomite service.
{% endhint %}

{% hint style="success" %}
You earn GLP rewards and yield for your entire deposit on Dolomite. Even if your GLP is spread across various Dolomite services, you're still earning based on the total amount of GLP deposited in your vault.
{% endhint %}

## Stake GMX and esGMX

Staking and unstaking GMX and esGMX can be done from clicking the `Staking` button on the GLP row. Pressing the button will open the following modal:

<figure><img src="/files/NFp6wjLAA1FaykxYG4VM" alt=""><figcaption><p>The staking panel for GMX and esGMX</p></figcaption></figure>

To learn how how boosting and multiplier points work, please read the corresponding section in the [GMX documentation](https://gmxio.gitbook.io/gmx/rewards#multiplier-points).

There are some minor distinctions between staking GMX and esGMX on Dolomite vs. the GMX interface. Importantly, staking GMX will require a token approval from the GMX token with your proxy vault's address set as the spender. Upon staking, the GMX tokens will be pulled from your wallet into the proxy vault and staked. No vanilla GMX tokens (tokens that are unstaked) are ever left in the proxy vault (they should always show as sbfGMX or vGMX). Any idle GMX left in the vault from claiming or unstaking is always sent to the vault owner's address (your wallet).

On the other hand, staking esGMX always pulls the tokens from your proxy vault and *never* from your wallet. Since esGMX is non-transferrable, the esGMX tokens can only ever be used in the following places:

1. Held in the proxy vault as esGMX
2. Staked from the proxy vault, which shows in the vault as sbfGMX tokens
3. Vested from the proxy vault, which shows in the vault as vGMX or vGLP tokens (more on this below)

No token approvals are needed to move esGMX into staking or vesting. Note, esGMX can *technically*, be transferred by initiating a full account transfer (more on this below).

## Vest esGMX

New GMX tokens are introduced into circulation by vesting esGMX into GMX tokens. By default, all esGMX you own can be converted into GMX over the course of one year by initiating the vesting process with your staked GMX or GLP tokens.

To get started, click on the `Vesting` button from the GLP row to open the following modal:

<figure><img src="/files/ebrXZbOSc0UpuChnsKbL" alt=""><figcaption><p>The vesting panel for converting esGMX into GMX</p></figcaption></figure>

The mechanics for vesting esGMX into GMX work exactly the same as the GMX interface. To learn more about how vesting works, please read the following section from the [GMX documentation](https://gmxio.gitbook.io/gmx/rewards#vesting).

Importantly, any GLP tokens you use for vesting do not impact your virtual balances, borrow positions, or any other area on Dolomite that utilizes your virtual liquidity. Meaning, you can actively borrow against your GLP while you're using it to vest your esGMX into GMX without any limitations.

> Note, if your GLP gets liquidated in any position, you may be forced to unvest your GLP that's converting esGMX into GMX before it's seized by the liquidator. This should only happen if the amount of GLP held in your proxy vault is not enough to cover the debt owed against the position that is underwater.

## Full Account Transfers

Dolomite is the first protocol to offer support for full account transfers into a money market protocol. Full account transfers allow the sender to transfer all of their esGMX, staked multiplier points, GLP and staked GMX to another account while not losing any of those accumulated rewards. It's an important feature to allow long-term GMX protocol users to transfer funds while not being penalized by breaking their streak.

{% hint style="warning" %}
Full account transfers can only be executed into Dolomite once per wallet address. They cannot be performed into Dolomite if you've already deposited GLP into Dolomite for the same wallet address. If you've already deposited GLP into Dolomite for the same wallet address, you'll need to do a full account transfer into Dolomite using a different wallet address.

Dolomite does not currently support transfers out of Dolomite to external addresses but may or may not add that feature at a later time.
{% endhint %}

Executing a full account transfer is a two-transaction process that requires you to start on GMX's website and finish on Dolomite:

1. Click the `Transfer Account` button the GLP row to open the `Transfer Account` panel.
2. With the panel open, copy the `Receiver Address` to your clipboard. You'll need this on GMX's website.
3. On the `Transfer Account` page on GMX's website, paste the `Receiver Address` you just copied into the input field. Click `Begin Transfer` and confirm the transaction from your wallet. This is the first transaction (of 2 total).
4. Go back to Dolomite and open the `Transfer Account` panel again. Enter your wallet address as the `Sender Address`. Your wallet address can be copied to your clipboard by opening Metamask and clicking on your wallet from the top-middle toolbar of the extension .Click `Finalize Transfer` and confirm the transaction from your wallet. This is the second and final transaction.

<figure><img src="/files/PKens4bNU5FdY1FuiP1l" alt=""><figcaption><p>The Transfer Account panel on Dolomite</p></figcaption></figure>

<figure><img src="/files/qquYb3FpRJh2ZF5tT12u" alt=""><figcaption><p>The Transfer Account page on GMX</p></figcaption></figure>

Please keep in mind that transferring an account requires a number of conditions to be met prior to the transfer executing. These include:

* The sender has no GMX being used to vest esGMX into GMX
* The sender has no GLP being used to vest esGMX into GMX.
* The receiver has not staked GMX tokens before
* The receiver has not staked GLP tokens before

If any of these conditions does not pass, you won't be able to execute the transfer. As shown in the Transfer Account image above from the Dolomite interface, any failing conditions will be shown with an ![](/files/QYjJeoa8vZOMZE9DZHLg)next to it to make the error more clear to you.

## Risk

GLP is not a borrowable asset and is permanently in [Isolation Mode](/risk-management#isolation-mode). You can learn more about the other risk parameters by visiting the [Risk Mitigation](/risk-management) page.

## Price Oracle

The GLP oracle implementation can be seen on this [page](broken://pages/9ZCQbnUDHv1LjcbbQePQ), which accounts for the PnL of positions being underwritten by GMX and marks the value of the collateral using Chainlink.

Dolomite's implementation also subtracts 75 basis points from the price to reflect the cost to liquidate GLP by redeeming it for an underlying asset (most likely `USDC`).

## Liquidations

Getting liquidated for any GLP you have in a borrow position will result in the GLP you hold being seized by the liquidator and sold off using the normal collateral calculations, as explained in [Liquidations](/risk-management#liquidations). Importantly, only the GLP is seized though. All esGMX, staked-GMX, multiplier points, ETH rewards, etc. are kept in your vault and are never taken by the liquidator under any circumstance.

> Dolomite never takes your rewards when a complex collateral asset is liquidated. Only the collateral asset is ever taken.

## Fees

There are **no special fees** for using your GLP or GMX tokens on Dolomite. You keep 100% of the ETH rewards, multiplier points, staking rewards, esGMX, and vesting.&#x20;

On a fundamental level, we believe users, institutions, and protocols that want to run their own strategies shouldn't be hampered by Dolomite cutting into their strategy's viability by taking a portion of the rewards on a protocol-level.

## Audit

All of the code specific to Dolomite's GLP vaults and the interactions with GMX's ecosystem is currently being audited by [Zokyo](https://www.zokyo.io/).


# GM

All about GM, its integration with Dolomite, and what makes it special for GM holders.

## Overview

[GM (GMX Market) pools](https://app.gmx.io/#/pools) are the GMX platform's V2 liquidity tokens, collectively earning 63% of all fees generated from leverage trading, borrowing fees and swaps done on GMX V2. Each pool represents a long and short token pair (i.e. \[LONG-SHORT]), along with an associated token price to represent the pair. Compared to GLP, the GM pools isolate markets, risk, lowered slippage, has no risk of Impermanent Loss, and allows a wider range of assets to be listed.

The GM pools are designed to have a 50/50 split of the long and short tokens within the pool to back associated Long and Short Positions within the V2 GMX platform. As such, the buying and selling of a GM token are done with the either or both of the long and short tokens.

#### Dynamics of GM Pools

* The price of the GM tokens are a factor of price of the long/short tokens and the pending profit-and-loss of existing traders’ open positions.&#x20;
* Fees from leverage trading and swaps automatically increase the price of GM tokens.
* Incentivizes rebalancing a GM pool to maintain a 50/50 split.

*The price impact will change depending on the current balance of the pool. For example, if the pool has more "long" tokens than "short" tokens, then buying the GM token for that pool with the short token would provide a positive Price Impact. The same is true if you were to buy the GM token with short or long tokens that make up >50% of the pool, a higher negative price impact the greater the imbalance.*&#x20;

*This dynamic means that if there is a spread between the available long and short tokens within a GM pool, it results in a spread for selling and buying the GM tokens as well.*

{% hint style="info" %}
The prior information was taken from GMX's [Gitbook](https://docs.gmx.io/docs/providing-liquidity/v2). If you notice any of the information is out of date or incorrect, please let us know.
{% endhint %}

### Integration With Dolomite

Dolomite's integration with the GMX ecosystem exemplifies Dolomite's modularity and positioning as a public utility for other protocols to utilize. First and foremost, Dolomite's protocol does **not** take any fees from anything earned in the GMX ecosystem, **instead passing all rewards on to the user**.

{% hint style="warning" %}
Currently "Intent Assets," in this case GM assets, have `Zap` limitations.&#x20;

* `Zaps` between a Borrow Position and a user's Dolomite Balance, while the GM asset is the input, is currently not possible.

This means the following `Zap` options are currently **not** possible with a **gm asset as input**:

* [Zap - Trade Before Adding](https://docs.dolomite.io/guide/zap#trade-before-adding)
* [Zap - Trade After Removing](https://docs.dolomite.io/guide/zap#trade-after-removing)

However, this means that [Zap - Trade into Different Collateral](https://docs.dolomite.io/guide/zap#trade-into-different-collateral), [Zap Swap Panel](https://docs.dolomite.io/guide/zap#zap-swap-panel), [Zap - Use Collateral To Repay](https://docs.dolomite.io/guide/zap#use-collateral-to-repay), and the above `Zaps` with the **gm asset as output** can still be done.&#x20;
{% endhint %}

## Depositing GM to Dolomite

Once you have GM in your wallet, you may deposit it into Dolomite via the `Balances` page. To deposit it, locate the plus icon *(i.e ⊕)*, to the right of GM asset and the **In Wallet** column *(shown below)*.

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

Note, if it is your first time depositing, you will have to unlock GM asset first. After successful transactions, the GM asset will appear in your Dolomite Balance *(i.e. below the deposit/withdraw panel).*

## Asset Rewards

With the GM pool structure, the asset rewards, or APR/APY, will be added directly to the price of the asset. Unlike GLP, there is no need to claim any asset rewards manually.&#x20;

## Risk

GM tokens are not borrowable assets and is permanently in [Isolation Mode](https://docs.dolomite.io/risk-mitigation#isolation-mode). You can learn more about the other risk parameters by visiting the [Risk Mitigation](https://docs.dolomite.io/risk-mitigation) page.

## Price Oracle

The GM oracle implementation can be seen on this [page](https://docs.dolomite.io/smart-contract-addresses/module-gmx-and-glp).

## Liquidations

Getting liquidated for any GM tokens you have in a borrow position will result in the GM tokens you hold in the position being seized by the liquidator and sold off using the normal collateral calculations, as explained in [Liquidations](https://docs.dolomite.io/risk-mitigation#liquidations).

> Dolomite never takes your rewards when a complex collateral asset is liquidated. Only the collateral asset is ever taken

## Fees

Dolomite does not take any additional fees for using GM tokens, however there are several circumstances that require a fee due to the technical integration with GMX.

**Opening a new borrow position** using GM tokens as collateral requires a deposit of 0.001 ETH to be paid from your wallet (*not* your Dolomite Balance). This is used to ensure a liquidation can be processed properly utilizing GMX relayers. The 0.001 ETH is returned to you when the borrow position is closed without liquidation.

**Zapping GM assets** (either to a GM asset or from a GM asset) requires an additional small ETH fee to be paid from your wallet (*not* your Dolomite Balance). This fee is used to pay the GMX relayer to finalize the transaction utilizing the GM asset. Zaps using GM assets also have a minimum size of $1 to ensure the trades can be executed.

## Audits

All of the code specific to Dolomite's GM vaults and the interactions with GMX's ecosystem is currently being audited by [Guardian Audits](https://guardianaudits.com/).


# Abracadabra - magicGLP

All about magicGLP, its integration with Dolomite, and what makes it special for magicGLP holders.

## Overview

magicGLP is an auto-compounding vault that was built by [Abracadabra](https://abracadabra.money/) for the GMX platform's liquidity token, GLP. You can learn more about how GLP works [here](https://docs.dolomite.io/integrations/gmx-glp).

On Arbitrum, users can mint magicGLP by depositing GLP at any time. There are no fees incurred for depositing or withdrawing. There is currently a 1% fee that's taken from the yield earned The vault functions by taking the ETH rewards and auto compounds them into increasingly more GLP, resulting in magicGLP appreciating in value against GLP. Auto-compounding occurs twice per day.

magicGLP token address (Arbitrum): [0x85667409a723684Fe1e57Dd1ABDe8D88C2f54214](https://arbiscan.io/token/0x85667409a723684fe1e57dd1abde8d88c2f54214)

{% hint style="info" %}
The prior information was taken from Abracadabra's [Gitbook](https://abracadabramoney.gitbook.io/learn/intro/stake/magicglp). If you notice any of the information is out of date or incorrect, please let us know.
{% endhint %}

## How Can you Get magicGLP?

magicGLP can be acquired by minting it on [Abracadabra's staking page](https://app.abracadabra.money/#/magicGLP) on their web application. To mint magicGLP, you must first have GLP in your wallet.

## Depositing magicGLP into Dolomite

Once you have magicGLP in your wallet, you may deposit it into Dolomite via the `Balances` page. To deposit it, locate the plus icon *(i.e ⊕)*, to the right of mGLP *(mGLP is the symbol for magicGLP)* and the **In Wallet** column *(shown below)*.

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

Note, if it is your first time depositing, you will have to unlock magicGLP first, then perform the deposit. Once your magicGLP is deposited, you will be able to use it across Dolomite's various services.

## Risk

magicGLP is not a borrowable asset. You can learn more about the other risk parameters by visiting the [Risk Mitigation](/risk-management) page.

## Price Oracle

The smart contract used for magicGLP can be seen on this [page](broken://pages/l74TFewMZIpTuWTGOfDo). The implementation accounts for the price of GLP using the methodologies described [here](/integrations/gmx/glp#price-oracle) as well as the exchange rate between magicGLP and GLP.

{% hint style="warning" %}
The current oracle implementation is flash loan resistant as long as magicGLP remains unborrowable. Meaning, the magicGLP asset must be unborrowable for this price oracle implementation to be considered safe.

As a precaution, the price oracle checks that magicGLP is not borrowable before returning a price. If for any reason in the future magicGLP is made borrowable, this failsafe will activate and the oracle will purposefully fail to function.
{% endhint %}

## Fees

There are **no special fees** for using your magicGLP tokens on Dolomite. You keep 100% of the yield it generates.


# Jones DAO - jUSDC

All about jUSDC, its integration with Dolomite, and what makes it special for jUSDC holders.

## Overview

jUSDC is an auto-compounding vault that was built by [Jones DAO](https://www.jonesdao.io/) to earn "transparent USDC yield without the inefficiencies of competing methods"

On Arbitrum, users can mint jUSDC by depositing USDC at any time. There are no fees incurred for depositing. There is currently a 0.97% fee for withdrawing, which is called a Retention Fee on their site. The retention fee is paid to the vault and shared amongst depositors who retain their deposit in jUSDC.&#x20;

jUSDC token address (Arbitrum): [0xB0BDE111812EAC913b392D80D51966eC977bE3A2](https://arbiscan.io/token/0xB0BDE111812EAC913b392D80D51966eC977bE3A2)

{% hint style="info" %}
The prior information was taken from Jones DAO's [Gitbook](https://docs.jonesdao.io/jones-dao/features/understanding-jusdc-and-jglp). If you notice any of the information is out of date or incorrect, please let us know.
{% endhint %}

## How Can you Get jUSDC?

jUSDC can be acquired by minting it on [Jones DAO's USDC Vault page on their web application](https://app.jonesdao.io/vaults/leveraged/usdc). To mint jUSDC, you must first have USDC in your wallet.

## Depositing jUSDC into Dolomite

Once you have jUSDC in your wallet, you may deposit it into Dolomite via the `Balances` page. To deposit it, locate the plus icon *(i.e ⊕)*, to the right of jUSDC and the **In Wallet** column *(shown below)*.

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

Note, if it is your first time depositing, you will have to unlock jUSDC first, then perform the deposit. Once your jUSDC is deposited, you will be able to use it across Dolomite's various services.

## Staking

On Dolomite, you can stake your jUSDC while continuing to use it as collateral for borrowing.

To stake your jUSDC, simply go to the [Balances page](https://app.dolomite.io/balances) and locate the jUSDC row, which displays the asset's APR and your jUSDC balance. If you hover your mouse over the APR, it will show a breakdown of the source of that yield.

Once you've located the jUSDC row, you'll find a button labeled "Staking". Click that to open up the jUSDC staking panel.

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

When you click the staking button, you will be shown the jUSDC staking panel. This displays your total balance of jUSDC on Dolomite, with a breakdown to show how much is currently staked, and how much is not yet staked.

<figure><img src="/files/CJzvaRRxWM7hDTRXiXml" alt="" width="563"><figcaption></figcaption></figure>

To stake jUSDC, enter the amount of jUSDC you would like to stake in the input field at the bottom of the panel, above the green `Stake` button. Alternatively, you can click the `max` button on the right side above that input field to automatically enter the maximum staking amount based on your available unstaked jUSDC balance.

Staking jUSDC incurs a 1% fee, paid to Jones DAO. That 1% fee is taken from the jUSDC you stake. So for example, if you enter 100 jUSDC as the amount you would like to stake, you will pay 1 jUSDC to Jones DAO and the rest will be staked.

After entering an amount, click the green `Stake` button to submit the transaction, which you will then need to sign in your wallet. Once the transaction has succeeded, you will see your new staked balance reflected on the staking panel.

To unstake, select the `Unstake` tab on the right side of the middle of the staking panel, which will display your staked jUSDC balance and an input field. Enter the amount you would like to unstake or click the `max` button to automatically fill the field with your total staked jUSDC balance. Once you have entered an amount, click the green `Unstake` button at the bottom of the panel to submit the transaction, which you will need to sign in your wallet. There is no fee for unstaking.

{% hint style="info" %}
When managing a borrow position on the [Borrow page](https://app.dolomite.io/borrow), the amount of jUSDC that is available for use as collateral is equivalent to the "Total jUSDC Balance" displayed in the staking panel. Whether staked or not, you can use your jUSDC as collateral. Staked jUSDC used as collateral will still earn rewards!
{% endhint %}

## Claiming Rewards

Staking jUSDC earns you rewards, which can also be claimed right on Dolomite.

As in the Staking section above, first go to the [Balances page](https://app.dolomite.io/balances) and locate the jUSDC row, where the asset's APR and your balance of jUSDC are displayed. You should find a blue button right below the jUSDC row titled "Claim Rewards". Click that to open the jUSDC ARB Rewards panel.

<figure><img src="/files/QpKuzh943hl8nzaSxCSA" alt="" width="563"><figcaption></figcaption></figure>

On this panel you will see the current jUSDC APR, which represents the amount being earned from both Jones DAO's GLP strategy as well as ARB rewards. You can also see the total jUSDC TVL being staked by all jUSDC users, as well as the amount of jUSDC you currently have staked, and the rewards you've earned.

To claim available rewards, click the green `Claim Rewards` button and sign the transaction from your wallet. Please consult Jones DAO documentation to learn more about the scheduled release of ARB rewards to stakers.

## Risk

jUSDC is not a borrowable asset. jUSDC can only be deposited by an EOA. jUSDC can only borrow USDC debt. No other collateral asset can be used in a position to collateralize debt with jUSDC.

Dolomite is able to bypass the 24hr redemption cooldown in the event a liquidation occurs. Liquidations are unlikely to occur though, given users can only borrow correlated debt against jUSDC.

You can learn more about the other risk parameters by visiting the [Risk Mitigation](/risk-management) page.

{% hint style="info" %}
If you have a smart wallet and would like to deposit jUSDC, reach out to the Dolomite team on Discord and we can work on enabling it for you.
{% endhint %}

## Price Oracle

The smart contract used for jUSDC's price oracle can be seen on this [page](broken://pages/hBDKcuRjekvIuVqt5UDF). The implementation gets the value of USDC, the exchange rate between jUSDC and USDC from the jUSDC contract, and subtracts the retention fee (0.97% at the time of writing) from the value.

{% hint style="warning" %}
The current oracle implementation is flash loan resistant as long as jUSDC remains unborrowable. Meaning, the jUSDC asset must be unborrowable for this price oracle implementation to be considered safe.

As a precaution, the price oracle checks that jUSDC is not borrowable before returning a price. If for any reason in the future jUSDC is made borrowable, this failsafe will activate and the oracle will purposefully fail to function.
{% endhint %}

## Fees

There are **no additional fees** for using your jUSDC tokens on Dolomite. You keep 100% of the yield it generates. The only fee charged is the 0.97% retention fee by Jones DAO (this is not charged by Dolomite).


# PlutusDAO - plvGLP

All about plvGLP, its integration with Dolomite, and what makes it special for plvGLP holders.

Overview

plvGLP is an autocompounding vault that was built by [PlutusDAO](https://plutusdao.io) for the GMX platform's liquidity token, GLP. You can learn more about how GLP works [here](https://docs.dolomite.io/integrations/gmx-glp).

On Arbitrum, users can mint plvGLP by depositing GLP at any time. There are no fees incurred for depositing. When redeeming plvGLP for GLP there is a 2% exit fee charged in GLP. The vault functions by taking the ETH rewards and auto compounds them into increasingly more GLP, resulting in plvGLP appreciating in value against GLP. Autocompounding occurs every 8 hours or 3 times per day.

plvGLP token address (Arbitrum): [0x5326E71Ff593Ecc2CF7AcaE5Fe57582D6e74CFF1](https://arbiscan.io/token/0x5326e71ff593ecc2cf7acae5fe57582d6e74cff1)

{% hint style="info" %}
The prior information was taken from PlutusDAO's [Gitbook](https://plutusdao-1.gitbook.io/plutus-docs/products/plvassets/plvglp). If you notice any of the information is out of date or incorrect, please let us know.
{% endhint %}

### Integration with Dolomite

Dolomite's integration with the PlutusDAO ecosystem exemplifies Dolomite's modularity and positioning as a public utility for other protocols to utilize. First and foremost, Dolomite's protocol does **not** take any fees from anything earned in the PlutusDAO ecosystem, **instead passing all rewards on to the user**. This includes:

* PLS rewards from staking plvGLP
* Autocompounded yield that plvGLP earns

## Where Can you Get plvGLP?

plvGLP can be acquired by minting it on [PlutusDAO's vaults page](https://plutusdao.io/vaults) on their web application. To mint plvGLP, you must first have GLP in your wallet.

## Depositing plvGLP into Dolomite

Once you have plvGLP in your wallet,  you may deposit it into Dolomite via the `Balances` page. To deposit it, locate the plus icon *(i.e ⊕)*, to the right of plvGLP and the **In Wallet** column *(shown below)*.

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

Note, if it is your first time depositing, you will have to unlock plvGLP first, then perform the deposit. Once your plvGLP is deposited, you will be able to interact with the PlutusDAO rewards ecosystem, the same way you would normally from PlutusDAO's web application!

{% hint style="info" %}
Depositing special assets like plvGLP into Dolomite results in the creation of your proxy vault. This all happens behind the scenes and occurs for each unique wallet that chooses to deposit plvGLP.&#x20;

This proxy vault debits your Dolomite balance and gives you access to plvGLP virtual liquidity for use across Dolomite's various features. The proxy vault is created when you perform your first deposit into Dolomite.
{% endhint %}

## Staking your plvGLP

The different reward options can be accessed by clicking to expand the plvGLP row on the `Balances` page if it's not already expanded:

<figure><img src="/files/28BuqKabDMTnaWPRtlyj" alt=""><figcaption></figcaption></figure>

Staking and unstaking plvGLP can be done by clicking the `Staking` button on the plvGLP row on the balances page, which takes you to the `Staking` panel (shown below).

<figure><img src="/files/093d9bf7ru8P65EAkQO4" alt=""><figcaption><p>The staking panel for plvGLP</p></figcaption></figure>

Staking your plvGLP always pulls the plvGLP tokens from your proxy vault and deposits them into the plvGLP rewards contract to earn PLS rewards (PLS is PlutusDAO's native governance token). No token approvals are needed to be performed by you to stake your plvGLP since the proxy vault performs them automatically before each staking operation.

## plvGLP & Dolomite's Virtual Liquidity

You may notice at this point that when you stake your entire plvGLP balance to earn rewards your Available balance on Dolomite remains the same. This concept heavily exemplifies Dolomite's virtual liquidity innovation that allows users to control how and where they want to allocate their tokens for capturing rewards while being able to utilize their liquidity across Dolomite's services.

For example, you can deposit 5 plvGLP and stake all 5 tokens (like in the screenshot shown above).  Then you can continue to use the original balance of 5 plvGLP to open as many isolated borrow positions as you'd like. The plvGLP deposited for staking doesn't change your available balance and vice versa (depositing some or all of your plvGLP into borrow positions doesn't change how much plvGLP you can stake).

## Claiming PLS Rewards

Staking your plvGLP through Dolomite's interface produces PLS rewards that you can claim to your wallet (not your proxy vault) by clicking the `Claim Rewards` button on the  plvGLP row on the balances page. Clicking `Claim Rewards` takes you to the following panel:

<figure><img src="/files/ksdDOcjOBpNeHCoBw6da" alt=""><figcaption><p>The Claim Rewards panel for plvGLP</p></figcaption></figure>

Click the `Claim Rewards` button to send the pending rewards shown above directly to your wallet.

{% hint style="info" %}
The `Emission APR` shown above reflects the APR yield earned in PLS for staking plvGLP and the `GLP APR` represents the yield being auto-compounded into more plvGLP.
{% endhint %}

## Risk

plvGLP is not a borrowable asset and is permanently in [Isolation Mode](/risk-management#isolation-mode). You can learn more about the other risk parameters by visiting the [Risk Mitigation](/risk-management) page.

## Price Oracle

The plvGLP price oracle can be found on this [page](broken://pages/ljlYl195eVIB399wP55w), which accounts for the price of GLP using the methodologies described [here](/integrations/gmx/glp#price-oracle) as well as the exchange rate between plvGLP and GLP.

Dolomite's implementation also subtracts the exit fee from the price to reflect the cost to liquidate plvGLP by redeeming it for GLP.

{% hint style="warning" %}
The current oracle implementation is flash loan resistant as long as plvGLP remains unborrowable. Meaning, the plvGLP asset must be unborrowable for this price oracle implementation to be considered safe.

As a precaution, the price oracle checks that plvGLP is not borrowable before returning a price. If for any reason in the future plvGLP is made borrowable, this failsafe will activate and the oracle will purposefully fail to function.
{% endhint %}

## Liquidations

Getting liquidated for any plvGLP you have in a borrow position will result in the plvGLP you hold being seized by the liquidator and sold off using the normal collateral calculations, as explained in [Liquidations](/risk-management#liquidations). Importantly, only the plvGLP is seized though. All PLS rewards are kept in your vault and are never taken by the liquidator under any circumstance.

{% hint style="info" %}
Dolomite never takes your rewards when a complex collateral asset is liquidated. Only the collateral asset is ever taken.
{% endhint %}

## Fees

There are **no special fees** for using your plvGLP tokens on Dolomite. You keep 100% of the yield and staking rewards.&#x20;


# Pendle

This page links to the different integrations Dolomite has with the Pendle ecosystem

* **Learn more about PT assets on Dolomite:**

{% content-ref url="/pages/YlmV67Si5hbbW59nBgEL" %}
[Pendle - PT](/integrations/pendle/pendle-pt)
{% endcontent-ref %}

* **Learn more about YT assets on Dolomite:**

{% content-ref url="/pages/aO3LXeNCtoQabxOKrvZG" %}
[Pendle - YT](/integrations/pendle/pendle-yt)
{% endcontent-ref %}


# Pendle - PT

All about PT assets, their integration with Dolomite, and what makes them special for Pendle users.

## Overview of PT Tokens

Principal Tokens (PT), represent only the principal of a yield-bearing asset. Upon maturity, a PT asset can be redeemed 1:1 for the accounting asset. For example, if you have 100 PT-eETH, you can redeem them for 100 eETH when it expires in April of 2024.

As a PT asset separates the yield from the principal, you are able to purchase more of that PT asset than the inputted underlying asset. Upon maturity of the PT asset *(i.e. 25 April 2024)*, you are then able to realize that difference. Of course, as you are separating the yield from the principle, you would forego the asset's yield and points associated with the inputted underlying asset.

To represent this relationship, Pendle uses fixed APY *(Annual Percentage Yield)*.&#x20;

* For example, if you purchased PT-eETH on the 24th of March *(and expires at say* *25 April 2024)*, at a fixed APY of 60%, you would be receiving the 60% APY for the following four weeks. To simplify this would result in about a 5% profit in eETH *(assuming no fees and other potential factors)*.
* A useful tool to calculate a PT asset's return is Pendle's calculator feature. You can find this on the market page for any asset, by clicking the calculator button next to the buy button.&#x20;

<figure><img src="/files/g9PEGD7Zph9XqbSBD2TY" alt="" width="563"><figcaption><p>This asset matures in 99 days: Fixed APY = 9.75% and Underlying APY = 2.4%</p></figcaption></figure>

PT assets are tradeable anytime for its underlying asset, even before maturity. This is made possible through Pendle's AMM.

*See the Pendle docs for more information on PT assets:*

{% embed url="<https://docs.pendle.finance/ProtocolMechanics/YieldTokenization/PT>" %}

## Available PT assets on Dolomite <a href="#what-are-the-benefits-of-using-pt-glp-on-dolomite" id="what-are-the-benefits-of-using-pt-glp-on-dolomite"></a>

The following PT assets are currently active and integrated with Dolomite:

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td align="center"><strong>PT-ezETH</strong></td><td><strong>Base Asset:</strong></td><td> <em>Renzo Restaked ETH</em></td><td><strong>Type:</strong></td><td> <em>Liquid Restaking Token</em></td><td><strong>Asset Docs:</strong><br><a href="https://docs.renzoprotocol.com/docs/renzo/usdezeth"><em>https://docs.renzoprotocol.com/docs/renzo/usdezeth</em></a></td><td><strong>Chain:</strong></td><td><em>Arbitrum</em></td><td><strong>Oracle:</strong></td><td><em>PT-ezETH -> ezETH - Pendle TWAP</em> <br><em>ezETH -> ETH - Chainlink (Exchange Rate) ETH -> USD - Chainlink (Market Price)</em></td><td><a href="/files/9PXK3PiCoZ4uZv8wppHW">/files/9PXK3PiCoZ4uZv8wppHW</a></td></tr><tr><td align="center"><strong>PT-eETH</strong></td><td><strong>Base Asset:</strong></td><td><em>Etherfi ETH</em></td><td><strong>Type:</strong></td><td> <em>Liquid Restaking Token</em></td><td><strong>Asset Docs:</strong><br><a href="https://etherfi.gitbook.io/etherfi/getting-started/faq"><em>https://etherfi.gitbook.io/etherfi/getting-started/faq</em></a></td><td><strong>Chain:</strong></td><td><em>Arbitrum</em></td><td><strong>Oracle:</strong></td><td><em>PT-eETH -> eETH - Pendle TWAP</em> <br><em>eETH -> weETH - Chainlink (Exchange Rate) weETH -> ETH - Chainlink (Market Price) ETH -> USD - Chainlink (Market Price)</em></td><td><a href="/files/ta2MmCOP76kg8gsx2CWs">/files/ta2MmCOP76kg8gsx2CWs</a></td></tr><tr><td align="center"><strong>PT-rsETH</strong></td><td><strong>Base Asset:</strong> </td><td><em>KelpDao Restaked ETH</em></td><td><strong>Type:</strong></td><td><em>Liquid Restaking Token</em></td><td><strong>Asset Docs:</strong><br><a href="https://kelp.gitbook.io/kelp"><em>https://kelp.gitbook.io/kelp</em></a></td><td><strong>Chain:</strong></td><td><em>Arbitrum</em></td><td><strong>Oracle:</strong></td><td><em>PT-rsETH -> rsETH Pendle TWAP</em><br>rsETH -> ETH - Chainlink (Market Price) <br>ETH -> USD - Chainlink (Market Price)</td><td><a href="/files/CoRDcnRsqHcqSC43lDaT">/files/CoRDcnRsqHcqSC43lDaT</a></td></tr><tr><td align="center"><strong>PT-rETH</strong></td><td><strong>Base Asset:</strong></td><td><em>Rocket ETH</em></td><td><strong>Type:</strong></td><td><em>Liquid Staking Token</em></td><td><strong>Asset Docs:</strong><br><a href="https://rocketpool.net/liquid-staking/what-is-liquid-staking"><em>https://rocketpool.net/liquid-staking/what-is-liquid-staking</em></a></td><td><strong>Chain:</strong></td><td><em>Arbitrum</em></td><td><strong>Oracle:</strong></td><td><p><em>PT-rETH -> rETH Pendle TWAP</em> <br><em>rETH -> ETH Chainlink (Exchange Rate)</em></p><p><em>ETH -> USD - Chainlink (Market Price)</em></p></td><td><a href="/files/olQLFEXoy7C3KhYc9o2u">/files/olQLFEXoy7C3KhYc9o2u</a></td></tr><tr><td align="center"><strong>PT-wstETH</strong></td><td><strong>Base Asset:</strong></td><td><em>Lido Staked ETH</em></td><td><strong>Type:</strong></td><td><em>Liquid Staking Token</em></td><td><strong>Asset Docs:</strong><br><a href="https://help.lido.fi/en/articles/5230610-what-is-steth"><em>https://help.lido.fi/en/articles/5230610-what-is-steth</em></a></td><td><strong>Chain:</strong></td><td><em>Arbitrum</em></td><td><strong>Oracle:</strong></td><td><p><em>PT-wstETH -> wstETH - Pendle TWAP</em><br><em>wstETH -> ETH - Chainlink (Market Price)</em></p><p><em>ETH -> USD - Chainlink (Market Price)</em></p></td><td><a href="/files/6ytmxKF4l96oqmHF5Mln">/files/6ytmxKF4l96oqmHF5Mln</a></td></tr><tr><td align="center"><strong>PT-GLP</strong></td><td><strong>Base Asset:</strong></td><td><em>GMX's GLP Token</em></td><td><strong>Type:</strong></td><td><em>Liquidity Provider Token</em></td><td><strong>Asset Docs:</strong><br><a href="https://docs.gmx.io/docs/providing-liquidity/v1"><em>https://docs.gmx.io/docs/providing-liquidity/v1</em></a></td><td><strong>Chain:</strong></td><td><em>Arbitrum</em></td><td><strong>Oracle:</strong></td><td><em>PT-GLP -> GLP - Pendle TWAP</em><br><em>GLP -> USD - Algorithmic + Chainlink (Market Price)</em></td><td><a href="/files/kjHCIeIHL7E9gXzLWjRY">/files/kjHCIeIHL7E9gXzLWjRY</a></td></tr><tr><td align="center"><strong>PT-USDe</strong></td><td><strong>Base Asset:</strong></td><td><em>Ethena's USDe</em></td><td><strong>Type:</strong></td><td><em>"Synthetic" US Dollar</em>;<br><em>Collateralized by:</em><br><em>USDT, USDC, stETH, WETH, WBETH, mETH, BTC and ETH.</em></td><td><strong>Asset Docs:</strong><br><a href="https://ethena-labs.gitbook.io/ethena-labs/solution-overview/usde-overview">https://ethena-labs.gitbook.io/ethena-labs/solution-overview/usde-overview</a></td><td><strong>Chain:</strong></td><td><em>Mantle</em></td><td><strong>Oracle:</strong></td><td><em>PT-USDe -> USDe - Pendle TWAP</em> <br><em>USDe -> USD - Chronical (Market Price)</em></td><td><a href="/files/snFnMDTllDSss7XuBRTv">/files/snFnMDTllDSss7XuBRTv</a></td></tr><tr><td align="center"><strong>PT-mETH</strong></td><td><strong>Base Asset:</strong></td><td><em>Mantle's ETH</em></td><td><strong>Type:</strong></td><td><em>Liquid Staking Token</em></td><td><strong>Asset Docs:</strong><br><a href="https://docs.mantle.xyz/meth"><strong>https://docs.mantle.xyz/meth</strong></a></td><td><strong>Chain:</strong></td><td><em>Mantle</em></td><td><strong>Oracle:</strong></td><td><em>PT-mETH -> ETH - Pendle TWAP ETH -></em> <br><em>USD - Chronicle (Market Price)</em></td><td><a href="/files/oonAlWkc2o0UFaVqBCER">/files/oonAlWkc2o0UFaVqBCER</a></td></tr><tr><td align="center"><strong>PT-MNT</strong></td><td><strong>Base Asset:</strong></td><td><em>Mantle's MNT</em></td><td><strong>Type:</strong></td><td><em>Governance Token</em></td><td><strong>More Information:</strong><br><a href="https://rewards.mantle.xyz/">https://rewards.mantle.xyz/</a></td><td><strong>Chain:</strong></td><td><em>Mantle</em></td><td><strong>Oracle:</strong></td><td><em>PT-MNT -> MNT - Pendle TWAP MNT -></em> <br><em>USD - Chronicle (Market Price)</em></td><td><a href="/files/abfHIwn6dcjMiPUKT4jx">/files/abfHIwn6dcjMiPUKT4jx</a></td></tr></tbody></table>

{% hint style="info" %}
*As there are possibly multiple expiration dates for each integrated asset, you might see multiple versions of the same asset on Dolomite.*
{% endhint %}

*To see an asset's statistics on Dolomite (i.e. to see the Supply Cap or Liquidation Threshold), visit:*

{% embed url="<https://app.dolomite.io/stats>" %}
*Change the chain you are on to find the correlated asset.*&#x20;
{% endembed %}

*To see the Pendle market for each integrated PT asset, visit:*

{% embed url="<https://app.pendle.finance/trade/markets>" %}
*Change the chain you are on to find the correlated asset.*&#x20;
{% endembed %}

## What are the benefits of using PT assets on Dolomite? <a href="#what-are-the-benefits-of-using-pt-glp-on-dolomite" id="what-are-the-benefits-of-using-pt-glp-on-dolomite"></a>

Since PT assets serve as the principal token for its underlying asset, you can lock in the implied yield on the underlying asset by purchasing PT version of it, and hold it till until maturity. This allows you to avoid the volatility with the underlying asset's interest while leveraging it, hedging it, or borrowing against it.

## How Can you Get PT assets? <a href="#how-can-you-get-pt-glp" id="how-can-you-get-pt-glp"></a>

PT assets can be acquired by minting or swapping to it on [Pendle's Market page](https://app.pendle.finance/trade/markets) on their web application, or right on Dolomite using [Zap](/guide/zap).

To acquire a PT asset, you must first have a valid token that can be zapped into the PT asset in your wallet, or you can mint it by depositing the correlated yield-bearing token, which will produce PT and YT version of it.

Another method to obtain an integrated PT asset on Dolomite is by using the `Zap` feature. You are able to `Zap` to and from a PT asset both from your Balance and within Borrow Positions. See more on using `Zap` [here](https://docs.dolomite.io/guide/zap).

<figure><img src="/files/mQAFrpIeVVtagxUsLGfW" alt="" width="427"><figcaption><p>Zapping mGLP to PT-eETH via the Swap Panel on the Balances Page.</p></figcaption></figure>

## Depositing a PT asset onto Dolomite <a href="#depositing-pt-glp-into-dolomite" id="depositing-pt-glp-into-dolomite"></a>

Once you have PT asset in your wallet, you may deposit it onto Dolomite via the `Balances` page *(however if you've used `Zap` to get your PT asset, you'll already have the PT asset in your Dolomite Balance and can skip this step)*. To deposit it, locate the plus icon *(i.e ⊕)*, to the right of your PT asset the **In Wallet** column *(shown below)*.

<figure><img src="/files/kRtNLDzdNpSpqV9hBQfl" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
***Note:** if it is your first time depositing, you will have to unlock your PT asset first, then perform the deposit. Once your PT asset is deposited, you will be able to use it across Dolomite's various services.*
{% endhint %}

## Risk <a href="#risk" id="risk"></a>

Each PT asset inherently comes with associated risk from its yield-bearing base asset, and the Pendle market.

For Dolomite, you can learn more about the risk parameters for PT assets by visiting the [Risk Mitigation](https://docs.dolomite.io/risk-mitigation) page.

To process these expirations, Dolomite uses a special [Expiry](https://docs.dolomite.io/smart-contract-addresses/core-proxies#dolomite-margin-core) smart contract that resembles a liquidation. You can learn more about the process [here](https://docs.dolomite.io/risk-mitigation#expirations).

## Fees

There are **no additional fees** for using your PT assets on Dolomite.


# Pendle - YT

All about YT assets, their integration with Dolomite, and what makes them special for Pendle users.

## Overview of YT Tokens

Yield Tokens (YT), represent only the yield of a yield-bearing asset. By holding YT, a user receives the real yield from the underlying asset, up until maturity. Naturally, the asset trends to $0 as there is less remaining yield over time before the asset reaches maturity, meaning upon maturity YT assets are worth $0.

On a Pendle market for a yield-bearing asset, the PT and YT forms of the yield-bearing asset share a relationship with the **Implied APY**.&#x20;

* **Underlying APY:** The current yield produced by the underlying asset.
* **Implied APY:** The rate that the yield-bearing asset is priced at by the market *(in terms of yield)*, and also representing the PT asset's fixed APY. At the time of purchasing a YT asset, the price of the YT asset is priced at the Implied APY.

<figure><img src="/files/KOxwh7nxPP7j0FYvWK4z" alt="" width="563"><figcaption><p>The graph represents the change in Implied APY over time. Notice the spread between Underlying and Implied APY.</p></figcaption></figure>

When purchasing YT tokens, 1 YT token represent the yield from 1 of the underlying asset. For example, buying 10 YT-stETH and holding them for 5 days lets you receive all of the yield equivalent to a 10 ETH deposit on Lido within the same period of time. You would profit in this example if the future yield ends up being greater than the Implied Yield you purchased the YT-stETH at, and would be at a loss if the inverse is true.&#x20;

While it might seem illogical for the Implied APY to be greater than the Underlying APY, it is important to remember the spread between them it completely dictated by the market. Users could potentially factor in speculation about the asset's future price or yield, or maybe potential abstracted yield of an underlying asset when purchasing YT tokens *(i.e. the underlying assets point system or additional yield such as oARB)*. These concepts often lead to a discrepancy between the Underlying APY of the asset versus the Implied APY, as speculation and market demand are factored in.&#x20;

*See the Pendle docs for more information on YT assets:*

{% embed url="<https://docs.pendle.finance/ProtocolMechanics/YieldTokenization/YT>" %}

## What are the benefits of using YT assets on Dolomite? <a href="#what-are-the-benefits-of-using-pt-glp-on-dolomite" id="what-are-the-benefits-of-using-pt-glp-on-dolomite"></a>

Dolomite empowers users to retain their DeFi-native rights while their assets are deposited on Dolomite. Meaning, you can continue to earn and claim the YT asset's interest while leveraging it, hedging it, or borrowing against it. Ultimately, enabling your YT asset as collateral on Dolomite opens the doors for many lucrative strategies to be ran.

## How Can you Get YT assets? <a href="#how-can-you-get-pt-glp" id="how-can-you-get-pt-glp"></a>

YT assets can be acquired by minting or swapping to it on [Pendle's Market page](https://app.pendle.finance/trade/markets) on their web application, or by using [Zap](/guide/zap) on Dolomite.&#x20;

To acquire a YT asset, you must first have a valid token that can be zapped into the YT asset in your wallet, or you can mint it by depositing the correlated yield-bearing token, which will produce PT and YT version of it.

Another method to obtain an integrated YT asset on Dolomite is by using the `Zap` feature. You are able to `Zap` to and from a YT asset both from your Balance and within Borrow Positions. See more on using `Zap` [here](https://docs.dolomite.io/guide/zap).

## Depositing a YT asset onto Dolomite <a href="#depositing-pt-glp-into-dolomite" id="depositing-pt-glp-into-dolomite"></a>

Once you have YT asset in your wallet, you may deposit it onto Dolomite via the `Balances` page *(however if you've used `Zap` to get your YT asset, you'll already have the YT asset in your Dolomite Balance and can skip this step)*. To deposit it, locate the plus icon *(i.e ⊕)*, to the right of your YT asset the **In Wallet** column *(shown below)*.

<figure><img src="/files/kRtNLDzdNpSpqV9hBQfl" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
***Note:** if it is your first time depositing, you will have to unlock the YT asset first, then perform the deposit. Once your YT asset is deposited, you will be able to use it across Dolomite's various services.*
{% endhint %}

## Risk <a href="#risk" id="risk"></a>

Each YT asset inherently comes with associated risk from its yield-bearing base asset, and the Pendle market.&#x20;

For Dolomite, you can learn more about the risk parameters for YT assets by visiting the [Risk Mitigation](https://docs.dolomite.io/risk-mitigation) page.

To process these expirations, Dolomite uses a special [Expiry](https://docs.dolomite.io/smart-contract-addresses/core-proxies#dolomite-margin-core) smart contract that resembles a liquidation. You can learn more about the process [here](https://docs.dolomite.io/risk-mitigation#expirations).

## Fees

There are **no additional fees** for using your YT assets on Dolomite.


# Arbitrum - vARB

All about vARB and its use in Arbitrum governance.

## Overview

vARB is the "Vote-Enabled" form of ARB on Dolomite. vARB utilizes Dolomite's virtual liquidity system, enabling the unique functionality of retaining ARB's inherent ability to vote within Arbitrum's governance system while at the same time borrowing against those assets.

{% hint style="warning" %}
vARB only exists on Dolomite, it is not a withdrawable or tradable asset. Withdrawing vARB from Dolomite only adds ARB to your wallet. Any "vARB" found outside of Dolomite is not associated with Dolomite.
{% endhint %}

{% hint style="info" %}
Note that vARB is not a new asset, but rather a way to distinguish what you can do with ARB on Dolomite.
{% endhint %}

ARB and vARB both represent the ARB token. The price displayed on Dolomite for both ARB and vARB will match the oracle price for ARB. Withdrawing vARB from Dolomite will result in ARB being added to your wallet. Their distinction from each other is purely in what you can do with ARB on Dolomite:

<table><thead><tr><th width="443"> </th><th width="116">ARB</th><th>vARB</th></tr></thead><tbody><tr><td>Can be lent (and earns lending interest)</td><td>✅</td><td>❌</td></tr><tr><td>Can be borrowed</td><td>✅</td><td>❌</td></tr><tr><td>Can be used as collateral</td><td>✅</td><td>✅</td></tr><tr><td>Can be used for voting</td><td>❌</td><td>✅</td></tr></tbody></table>

ARB and vARB can be converted 1-to-1 with each other. vARB is obtained via the conversion of ARB to vARB on the [Dolomite Balances](https://app.dolomite.io/balances) page. The underlying asset, ARB, is a fully functioning asset that can be deposited/withdrawn from a user's wallet. vARB is native to Dolomite, meaning a user is unable to deposit or withdraw this asset, along with other restrictions within Dolomite, outlined below.&#x20;

## Obtaining vARB on Dolomite

vARB can only be obtained by a 1-to-1 exchange, converting ARB to vARB on the [Dolomite Balances](https://app.dolomite.io/balances) page, or by `Zapping` ARB to vARB on the Borrow page when opening, closing, and within a Borrow Position. These methods will be demonstrated below:

### 1. Converting between ARB and vARB on Dolomite Balances

On the [Dolomite Balances](https://app.dolomite.io/balances) page, scroll down until you see the vARB (Vote-Enabled ARB) asset. If you don't see two buttons below your vARB balances, click on the vARB asset row to expand it. Click on the "Convert ARB/vARB" button, which will bring up a conversion window. On it you will see information about vARB, as well as tabs to select whether you would like to go from ARB to vARB or vARB to ARB.&#x20;

When converting ARB to vARB, you will see your available ARB balance displayed above the input field. Enter the amount you would like to convert to vARB, or click on your balance shown above the input field to use your full balance. Once you have entered the amount you wish to convert to vARB in the input field, you can proceed with the conversion.

If you haven't converted any ARB to vARB in the past, the button at the bottom will say "Create Dolomite Vault". This is a one time step to set up the vault that will hold your vARB, and is what enables the vARB to be used for Arbitrum governance voting while continuing to interact with the Dolomite ecosystem. Click the button and sign the transaction to create your vault.

If you've created your vault already, the button at the bottom will say "Convert ARB to vARB". Clicking this will prompt a transaction in your wallet. Sign the transaction to submit the conversion, and shortly afterwards you will see your ARB and vARB balances update. Congratulations, you have converted your ARB to vARB, you can now delegate while using the value of ARB to borrow against vARB!

<figure><img src="/files/43b5gYZEy2mjDdp7jgeY" alt="" width="325"><figcaption></figcaption></figure>

### 2. Zapping between ARB and vARB

Beyond converting between ARB and vARB on the Dolomite Balances page, you are also able to `Zap` applicable assets to vARB, and vARB to applicable assets in regards to Borrow Positions. vARB can be zapped to and from any asset just as regular ARB can, as long as it remains within the constraints laid out at the start of this docs page (such as vARB not being borrowable).

In the example image below, the transaction shown will borrow MIM and convert it to vARB, resulting in MIM debt and more vARB collateral.

<figure><img src="/files/ZaSg20SEleQfuPFnrLCb" alt="" width="515"><figcaption><p>Example of using Zap to loop vARB by borrowing MIM and zapping it to more vARB, increasing governance votes.</p></figcaption></figure>

## Delegating vARB

Once you have created a Dolomite Vault for vARB or converted to vARB for the first time, you can delegate your vARB. By default, the vARB votes are delegated to your wallet. Both vARB in your Balance and across all collateral in Borrow Positions will be delegated.&#x20;

<figure><img src="/files/evjogwnxEXZ9IrUvsUot" alt="" width="323"><figcaption><p>Delegates to "self" by default.</p></figcaption></figure>

If you wish to change the wallet the votes are directed to, you can do so by clicking on the vARB asset in your [Dolomite Balance](https://app.dolomite.io/balances) to expand the asset row if it is not already expanded, displaying two buttons. Click on the "Delegate Votes" button, and enter the wallet address you wish to delegate all your vARB to, or select from the displayed list to auto-fill any of the listed addresses. After you have entered the wallet address to delegate to, click on the green "Delegate" button. After a confirmation in your wallet, all the vARB will be delegated.

## Minimum Collateralization&#x20;

The minimum collateralization for vARB is 120%, or in terms of percent LTV, 83.3333% LTV. In comparison, the minimum collateralization for ARB is 115%, or 86.9565% LTV.&#x20;

## Risk

vARB is not a borrowable asset and is permanently in [Collateral-Only Mode](https://docs.dolomite.io/risk-mitigation#collateral-only-mode) and has an [Isolation Mode](https://docs.dolomite.io/risk-mitigation#collateral-only-mode) Level 1.&#x20;

## Fees

There are **no special fees** for converting between vARB and ARB.&#x20;


# Markets

Dolomite wraps around tokens to create markets and are accessed via numerical ID (not token address).

Dolomite has a Market for each ERC20 token asset it supports. Each Market specifies the [Price Oracle](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/interfaces/IPriceOracle.sol) used to determine the price for its asset, the [Interest Setter](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/interfaces/IInterestSetter.sol) contract which determines what the interest rates are for the Market, and other essential [Risk](/risk-management) params.

Markets are referenced by the protocol using their ascending numerical IDs.

If you are looking for token representations of markets, please check the [dTokens](/developer-documentation/dolomite-margin-dtokens) section.

## Mainnet Markets

### Arbitrum One

<table><thead><tr><th width="121">Market ID</th><th width="188">Asset</th><th width="489">Address</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td><a href="https://arbiscan.io/token/0x82aF49447D8a07e3bd95BD0d56f35241523fBab1">0x82aF49447D8a07e3bd95BD0d56f35241523fBab1</a></td></tr><tr><td>1</td><td>DAI</td><td><a href="https://arbiscan.io/token/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1">0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1</a></td></tr><tr><td>2</td><td>USDC.e</td><td><a href="https://arbiscan.io/token/0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8">0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8</a></td></tr><tr><td>3</td><td>LINK</td><td><a href="https://arbiscan.io/token/0xf97f4df75117a78c1A5a0DBb814Af92458539FB4">0xf97f4df75117a78c1A5a0DBb814Af92458539FB4</a></td></tr><tr><td>4</td><td>WBTC</td><td><a href="https://arbiscan.io/token/0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f">0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f</a></td></tr><tr><td>5</td><td>USDT</td><td><a href="https://arbiscan.io/token/0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9">0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9</a></td></tr><tr><td>6</td><td><a data-footnote-ref href="#user-content-fn-1">dfsGLP </a><a data-footnote-ref href="#user-content-fn-2">*</a></td><td><a href="https://arbiscan.io/token/0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698">0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698</a></td></tr><tr><td>7</td><td>ARB</td><td><a href="https://arbiscan.io/token/0x912ce59144191c1204e64559fe8253a0e49e6548">0x912CE59144191C1204E64559FE8253a0e49E6548</a></td></tr><tr><td>8</td><td>magicGLP</td><td><a href="https://arbiscan.io/token/0x85667409a723684fe1e57dd1abde8d88c2f54214">0x85667409a723684Fe1e57Dd1ABDe8D88C2f54214</a></td></tr><tr><td>9</td><td><a data-footnote-ref href="#user-content-fn-3">plvGLP *</a></td><td><a href="https://arbiscan.io/token/0x5c80aC681B6b0E7EF6E0751211012601e6cFB043">0x5c80aC681B6b0E7EF6E0751211012601e6cFB043</a></td></tr><tr><td><del>10</del></td><td><a data-footnote-ref href="#user-content-fn-4"><del>jUSDC *</del></a></td><td><a href="https://arbiscan.io/token/0x2adba3f917bb0af2530f8f295ad2a6ff1111fc05"><del>0x2aDba3f917bb0Af2530F8F295aD2a6fF1111Fc05</del></a></td></tr><tr><td>11</td><td><a data-footnote-ref href="#user-content-fn-5">PT-GLP *</a> (Mar 2024)</td><td><a href="https://arbiscan.io/token/0x7b07E78561a3C2C1Eade652A2a92Da150743F4D7">0x7b07E78561a3C2C1Eade652A2a92Da150743F4D7</a></td></tr><tr><td>12</td><td>UNI</td><td><a href="https://arbiscan.io/token/0xFa7F8980b0f1E64A2062791cc3b0871572f1F7f0">0xFa7F8980b0f1E64A2062791cc3b0871572f1F7f0</a></td></tr><tr><td>13</td><td>MIM</td><td><a href="https://arbiscan.io/address/0xFEa7a6a0B346362BF88A9e4A88416B77a57D6c2A">0xFEa7a6a0B346362BF88A9e4A88416B77a57D6c2A</a></td></tr><tr><td>14</td><td>wstETH</td><td><a href="https://arbiscan.io/token/0x5979D7b546E38E414F7E9822514be443A4800529">0x5979D7b546E38E414F7E9822514be443A4800529</a></td></tr><tr><td>15</td><td>rETH</td><td><a href="https://arbiscan.io/token/0xec70dcb4a1efa46b8f2d97c310c9c4790ba5ffa8">0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8</a></td></tr><tr><td>16</td><td><a data-footnote-ref href="#user-content-fn-6">YT-GLP *</a></td><td><a href="https://arbiscan.io/token/0x851729Df6C39BDB6E92721f2ADf750023D967eE8">0x851729Df6C39BDB6E92721f2ADf750023D967eE8</a></td></tr><tr><td>17</td><td>USDC</td><td><a href="https://arbiscan.io/token/0xaf88d065e77c8cc2239327c5edb3a432268e5831">0xaf88d065e77c8cC2239327C5EDb3A432268e5831</a></td></tr><tr><td>18</td><td>GRAIL</td><td><a href="https://arbiscan.io/token/0x3d9907f9a368ad0a51be60f7da3b97cf940982d8">0x3d9907F9a368ad0a51Be60f7Da3b97cf940982D8</a></td></tr><tr><td>19</td><td>MAGIC</td><td><a href="https://arbiscan.io/token/0x539bde0d7dbd336b79148aa742883198bbf60342">0x539bdE0d7Dbd336b79148AA742883198BBF60342</a></td></tr><tr><td>20</td><td>DPX</td><td><a href="https://arbiscan.io/token/0x6c2c06790b3e3e3c38e12ee22f8183b37a13ee55">0x6C2C06790b3E3E3c38e12Ee22F8183b37a13EE55</a></td></tr><tr><td>21</td><td>PENDLE</td><td><a href="https://arbiscan.io/token/0x0c880f6761f1af8d9aa9c466984b80dab9a8c9e8">0x0c880f6761F1af8d9Aa9C466984b80DAb9a8c9e8</a></td></tr><tr><td>22</td><td><a data-footnote-ref href="#user-content-fn-7">PT-rETH *</a> (Jun 2025)</td><td><a href="https://arbiscan.io/token/0xC9375EF7635fe556F613AB528C9a2ed946BD075d">0xC9375EF7635fe556F613AB528C9a2ed946BD075d</a></td></tr><tr><td>23</td><td><a data-footnote-ref href="#user-content-fn-8">PT-wstETH *</a> (Jun 2024)</td><td><a href="https://arbiscan.io/token/0x1bE165864C918527F2e3e131c2ADc4da9B8c619B">0x1bE165864C918527F2e3e131c2ADc4da9B8c619B</a></td></tr><tr><td>24</td><td><a data-footnote-ref href="#user-content-fn-9">PT-wstETH* </a> (Jun 2025)</td><td><a href="https://arbiscan.io/token/0xfeF14a3A1Ec46D4eB18c784BC1E61297FC68bbc8">0xfeF14a3A1Ec46D4eB18c784BC1E61297FC68bbc8</a></td></tr><tr><td>25</td><td>JONES</td><td><a href="https://arbiscan.io/token/0x10393c20975cF177a3513071bC110f7962CD67da">0x10393c20975cF177a3513071bC110f7962CD67da</a></td></tr><tr><td>26</td><td>PREMIA</td><td><a href="https://arbiscan.io/token/0x51fC0f6660482Ea73330E414eFd7808811a57Fa2">0x51fC0f6660482Ea73330E414eFd7808811a57Fa2</a></td></tr><tr><td>27</td><td>RDNT</td><td><a href="https://arbiscan.io/token/0x3082CC23568eA640225c2467653dB90e9250AaA0">0x51fC0f6660482Ea73330E414eFd7808811a57Fa2</a></td></tr><tr><td>28</td><td><a data-footnote-ref href="#user-content-fn-10">vARB* </a></td><td><a href="https://arbiscan.io/token/0x1d9E10B161aE54FEAbe1E3F71f658cac3468e3C3">0x1d9E10B161aE54FEAbe1E3F71f658cac3468e3C3</a></td></tr><tr><td>29</td><td>GMX</td><td><a href="https://arbiscan.io/token/0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a">0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a</a></td></tr><tr><td>30</td><td><a data-footnote-ref href="#user-content-fn-11">Staked-GMX *</a></td><td><a href="https://arbiscan.io/token/0x790FF506ac24b03A21F3d0019227447AE2B55Ca5">0x790FF506ac24b03A21F3d0019227447AE2B55Ca5</a></td></tr><tr><td>31</td><td><a data-footnote-ref href="#user-content-fn-12">GM: ARB-USD *</a></td><td><a href="https://arbiscan.io/address/0x2c799166c9f0DbF9EFC5004cbCe4c5A37fA39329">0x2c799166c9f0DbF9EFC5004cbCe4c5A37fA39329</a></td></tr><tr><td>32</td><td><a data-footnote-ref href="#user-content-fn-13">GM: BTC-USD *</a></td><td><a href="https://arbiscan.io/token/0x1e8e8b7a2f827b3bc12b00ee402145061b7050ef">0x1E8e8B7a2F827b3bc12B00eE402145061b7050eF</a></td></tr><tr><td>33</td><td><a data-footnote-ref href="#user-content-fn-14">GM: ETH-USD *</a></td><td><a href="https://arbiscan.io/token/0x505582242757f16D72F8C4462A616E388Ca1b074">0x505582242757f16D72F8C4462A616E388Ca1b074</a></td></tr><tr><td>34</td><td><a data-footnote-ref href="#user-content-fn-15">GM: LINK-USD *</a></td><td><a href="https://arbiscan.io/token/0x18cB14564FBb015BD3439220D177799355abC0E0">0x18cB14564FBb015BD3439220D177799355abC0E0</a></td></tr><tr><td>35</td><td>weETH</td><td><a href="https://arbiscan.io/token/0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe">0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe</a></td></tr><tr><td>36</td><td><a data-footnote-ref href="#user-content-fn-16">PT-eETH *</a> (Apr 2024)</td><td><a href="https://arbiscan.io/token/0xa2e14377fA6ce3556E2248559E85dc44260e362f">0xa2e14377fA6ce3556E2248559E85dc44260e362f</a></td></tr><tr><td>37</td><td>ezETH</td><td><a href="https://arbiscan.io/token/0x2416092f143378750bb29b79eD961ab195CcEea5">0x2416092f143378750bb29b79eD961ab195CcEea5</a></td></tr><tr><td>38</td><td><a data-footnote-ref href="#user-content-fn-17">PT-ezETH *</a> (Jun 2024)</td><td><a href="https://arbiscan.io/token/0x12A3bb4FDBC5C932438e067338767eE4A9165f1b">0x12A3bb4FDBC5C932438e067338767eE4A9165f1b</a></td></tr><tr><td>39</td><td>XAI</td><td><a href="https://arbiscan.io/token/0x4Cb9a7AE498CEDcBb5EAe9f25736aE7d428C9D66">0x4Cb9a7AE498CEDcBb5EAe9f25736aE7d428C9D66</a></td></tr><tr><td>40</td><td>sGLP</td><td><a href="https://arbiscan.io/token/0x5402B5F40310bDED796c7D0F3FF6683f5C0cFfdf">0x5402B5F40310bDED796c7D0F3FF6683f5C0cFfdf</a> (this is only listed to enable seamless zapping for dfsGLP)</td></tr><tr><td>41</td><td><a data-footnote-ref href="#user-content-fn-18">PT-GLP *</a> (Sep 2024)</td><td><a href="https://arbiscan.io/token/0x0C4D46076af67F8ba1cC3C01f7e873BD91EA41ab">0x0C4D46076af67F8ba1cC3C01f7e873BD91EA41ab</a></td></tr><tr><td>42</td><td><a data-footnote-ref href="#user-content-fn-19">PT-eETH *</a> (Jun 2024)</td><td><a href="https://arbiscan.io/token/0x6Cc56e9cA71147D40b10a8cB8cBe911C1Faf4Cf8">0x6Cc56e9cA71147D40b10a8cB8cBe911C1Faf4Cf8</a></td></tr><tr><td>43</td><td><a data-footnote-ref href="#user-content-fn-20">jUSDC V2 *</a></td><td><a href="https://arbiscan.io/token/0x14c60cB8301E879dfb9eecbEbc013353b7e33012">0x14c60cB8301E879dfb9eecbEbc013353b7e33012</a></td></tr><tr><td>44</td><td><a data-footnote-ref href="#user-content-fn-21">GM: BTC *</a></td><td><a href="https://arbiscan.io/token/0xB15bbBfCff6c411410c66642306d1FfA7eCEc4D8">0xB15bbBfCff6c411410c66642306d1FfA7eCEc4D8</a></td></tr><tr><td>45</td><td><a data-footnote-ref href="#user-content-fn-22">GM: ETH *</a></td><td><a href="https://arbiscan.io/token/0x2D165A76dd3e552DF3860789331Ab73c5a3d7F92">0x2D165A76dd3e552DF3860789331Ab73c5a3d7F92</a></td></tr><tr><td>46</td><td>GRAI</td><td><a href="https://arbiscan.io/token/0x894134a25a5faC1c2C26F1d8fBf05111a3CB9487">0x894134a25a5faC1c2C26F1d8fBf05111a3CB9487</a></td></tr><tr><td>47</td><td><a data-footnote-ref href="#user-content-fn-23">GM: UNI-USD *</a></td><td><a href="https://arbiscan.io/token/0x20d51CB520C4622Dcc3d7E35003dBaB07d547E7E">0x20d51CB520C4622Dcc3d7E35003dBaB07d547E7E</a></td></tr><tr><td>48</td><td>wUSDM</td><td><a href="https://arbiscan.io/token/0x57F5E098CaD7A3D1Eed53991D4d66C45C9AF7812">0x57F5E098CaD7A3D1Eed53991D4d66C45C9AF7812</a></td></tr><tr><td>49</td><td>rsETH</td><td><a href="https://arbiscan.io/token/0x4186BFC76E2E237523CBC30FD220FE055156b41F">0x4186BFC76E2E237523CBC30FD220FE055156b41F</a></td></tr><tr><td>50</td><td><a data-footnote-ref href="#user-content-fn-24">PT-eETH *</a> (Sep 2024)</td><td><a href="https://arbiscan.io/token/0x4B82bd687042c4Ea68A2A45b8204dA74be0FB493">0x4B82bd687042c4Ea68A2A45b8204dA74be0FB493</a></td></tr><tr><td>51</td><td><a data-footnote-ref href="#user-content-fn-25">PT-ezETH *</a> (Sep 2024)</td><td><a href="https://arbiscan.io/token/0x9Fb5a64Ce2F659a6039aa57d45975fC097b3F373">0x9Fb5a64Ce2F659a6039aa57d45975fC097b3F373</a></td></tr><tr><td>52</td><td><a data-footnote-ref href="#user-content-fn-26">PT-rsETH *</a> (Sep 2024)</td><td><a href="https://arbiscan.io/token/0xCeC868060a724199c0fbf62e61449175690a55bD">0xCeC868060a724199c0fbf62e61449175690a55bD</a></td></tr><tr><td>53</td><td>wOETH</td><td><a href="https://arbiscan.io/token/0xD8724322f44E5c58D7A815F542036fb17DbbF839">0xD8724322f44E5c58D7A815F542036fb17DbbF839</a></td></tr><tr><td>54</td><td>USDe</td><td><a href="https://arbiscan.io/token/0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34">0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34</a></td></tr><tr><td>55</td><td><a data-footnote-ref href="#user-content-fn-27">GM: AAVE-USD *</a></td><td><a href="https://arbiscan.io/token/0x24C9121C75c099b38D40020872B8A0d2C27c614D">0x24C9121C75c099b38D40020872B8A0d2C27c614D</a></td></tr><tr><td>56</td><td><a data-footnote-ref href="#user-content-fn-28">GM: DOGE-USD *</a></td><td><a href="https://arbiscan.io/token/0x1BEEd3b7D1237B7773b5C4c249933E3Ca5e027c1">0x1BEEd3b7D1237B7773b5C4c249933E3Ca5e027c1</a></td></tr><tr><td>57</td><td><a data-footnote-ref href="#user-content-fn-29">GM: GMX-USD *</a></td><td><a href="https://arbiscan.io/token/0x5c99f6cf6069698D234D50Bf69EBd2f53e45ED1c">0x5c99f6cf6069698D234D50Bf69EBd2f53e45ED1c</a></td></tr><tr><td>58</td><td><a data-footnote-ref href="#user-content-fn-30">GM: SOL-USD *</a></td><td><a href="https://arbiscan.io/token/0x1EBB1c7023aDdbb2B6e30e6F4C8D4A4440Bfd412">0x1EBB1c7023aDdbb2B6e30e6F4C8D4A4440Bfd412</a></td></tr><tr><td>59</td><td><a data-footnote-ref href="#user-content-fn-31">GM: wstETH-USD *</a></td><td><a href="https://arbiscan.io/token/0xc587646f67b38739006ED0200e2E0a26FDb01c9B">0xc587646f67b38739006ED0200e2E0a26FDb01c9B</a></td></tr><tr><td>60</td><td><a data-footnote-ref href="#user-content-fn-32">PT-eETH *</a> (Dec 2024)</td><td><a href="https://arbiscan.io/token/0x24FE352a8303881dC8DeF80783682648623C57D2">0x24FE352a8303881dC8DeF80783682648623C57D2</a></td></tr><tr><td>61</td><td><a data-footnote-ref href="#user-content-fn-33">PT-rsETH *</a> (Dec 2024)</td><td><a href="https://arbiscan.io/token/0x26AbfE435447b236b8A014B296E1A8FA2b912AeC">0x26AbfE435447b236b8A014B296E1A8FA2b912AeC</a></td></tr><tr><td>62</td><td>uniBTC</td><td><a href="https://arbiscan.io/token/0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a">0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a</a></td></tr><tr><td>63</td><td><a data-footnote-ref href="#user-content-fn-34">GM: GMX *</a></td><td><a href="https://arbiscan.io/token/0xCF248BAF933C7b1B876B997246F25021A65383B3">0xCF248BAF933C7b1B876B997246F25021A65383B3</a></td></tr><tr><td>64</td><td><a data-footnote-ref href="#user-content-fn-35">GM: PENDLE-USD *</a></td><td><a href="https://arbiscan.io/token/0xE5d6Fe410c69b44C357403A1936B3BFADDBe340B">0xE5d6Fe410c69b44C357403A1936B3BFADDBe340B</a></td></tr><tr><td>65</td><td><a data-footnote-ref href="#user-content-fn-36">GM: PEPE-USD  *</a></td><td><a href="https://arbiscan.io/token/0x6586f1DB71513dAF94b0431156d225a46c00f20b">0x6586f1DB71513dAF94b0431156d225a46c00f20b</a></td></tr><tr><td>66</td><td><a data-footnote-ref href="#user-content-fn-37">GM: WIF-USD *</a></td><td><a href="https://arbiscan.io/token/0xF5063b40fa66aB2fbDa2E6807ac5759A41A1B0c3">0xF5063b40fa66aB2fbDa2E6807ac5759A41A1B0c3</a></td></tr><tr><td>67</td><td><a data-footnote-ref href="#user-content-fn-38">GLV-BTC *</a></td><td><a href="https://arbiscan.io/token/0x7E584529BB40220A2bD5d0c13E3d65aBd4A47F0E">0x7E584529BB40220A2bD5d0c13E3d65aBd4A47F0E</a></td></tr><tr><td>68</td><td><a data-footnote-ref href="#user-content-fn-39">GLV-ETH *</a></td><td><a href="https://arbiscan.io/token/0x11F4532c05fb8eA6320B1DC155BFdC2498A5d8B4">0x11F4532c05fb8eA6320B1DC155BFdC2498A5d8B4</a></td></tr><tr><td>69</td><td>tBTC</td><td><a href="https://arbiscan.io/token/0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40">0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40</a></td></tr><tr><td>70</td><td>eUSD</td><td><a href="https://arbiscan.io/token/0x12275DCB9048680c4Be40942eA4D92c74C63b844">0x12275DCB9048680c4Be40942eA4D92c74C63b844</a></td></tr><tr><td>71</td><td>ETH+</td><td><a href="https://arbiscan.io/token/0x18C14C2D707b2212e17d1579789Fc06010cfca23">0x18C14C2D707b2212e17d1579789Fc06010cfca23</a></td></tr><tr><td>72</td><td>AAVE</td><td><a href="https://arbiscan.io/token/0xba5DdD1f9d7F570dc94a51479a000E3BCE967196">0xba5DdD1f9d7F570dc94a51479a000E3BCE967196</a></td></tr><tr><td>73</td><td>USDS</td><td><a href="https://arbiscan.io/token/0x6491c05A82219b8D1479057361ff1654749b876b">0x6491c05A82219b8D1479057361ff1654749b876b</a></td></tr><tr><td>74</td><td>sUSDS</td><td><a href="https://arbiscan.io/token/0xdDb46999F8891663a8F2828d25298f70416d7610">0xdDb46999F8891663a8F2828d25298f70416d7610</a></td></tr><tr><td>75</td><td>savUSD</td><td><a href="https://arbiscan.io/token/0xA322e23a357cB7C596A7a834102B9d6d5b15da3e">0xA322e23a357cB7C596A7a834102B9d6d5b15da3e</a></td></tr></tbody></table>

### Berachain

<table><thead><tr><th width="128">Market ID</th><th width="154">Asset</th><th>Address</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td><a href="https://berascan.com/token/0x2F6F07CDcf3588944Bf4C42aC74ff24bF56e7590">0x2F6F07CDcf3588944Bf4C42aC74ff24bF56e7590</a></td></tr><tr><td>1</td><td>WBERA</td><td><a href="https://berascan.com/token/0x6969696969696969696969696969696969696969">0x6969696969696969696969696969696969696969</a></td></tr><tr><td>2</td><td>USDC</td><td><a href="https://berascan.com/token/0x549943e04f40284185054145c6E4e9568C1D3241">0x549943e04f40284185054145c6E4e9568C1D3241</a></td></tr><tr><td>3</td><td>HONEY</td><td><a href="https://berascan.com/token/0xFCBD14DC51f0A4d49d5E53C2E0950e0bC26d0Dce">0xFCBD14DC51f0A4d49d5E53C2E0950e0bC26d0Dce</a></td></tr><tr><td>4</td><td>WBTC</td><td><a href="https://berascan.com/token/0x0555E30da8f98308EdB960aa94C0Db47230d2B9c">0x0555E30da8f98308EdB960aa94C0Db47230d2B9c</a></td></tr><tr><td>5</td><td>USDT</td><td><a href="https://berascan.com/token/0x779Ded0c9e1022225f8E0630b35a9b54bE713736">0x779Ded0c9e1022225f8E0630b35a9b54bE713736</a></td></tr><tr><td>6</td><td>LBTC</td><td><a href="https://berascan.com/token/0xecAc9C5F704e954931349Da37F60E39f515c11c1">0xecAc9C5F704e954931349Da37F60E39f515c11c1</a></td></tr><tr><td>7</td><td>rswETH</td><td><a href="https://berascan.com/token/0x850CDF416668210ED0c36bfFF5d21921C7adA3b8">0x850CDF416668210ED0c36bfFF5d21921C7adA3b8</a></td></tr><tr><td>8</td><td>rUSD</td><td><a href="https://berascan.com/token/0x09D4214C03D01F49544C0448DBE3A27f768F2b34">0x09D4214C03D01F49544C0448DBE3A27f768F2b34</a></td></tr><tr><td>9</td><td>SBTC</td><td><a href="https://berascan.com/token/0x93F4d0ab6a8B4271f4a28Db399b5E30612D21116">0x93F4d0ab6a8B4271f4a28Db399b5E30612D21116</a></td></tr><tr><td>10</td><td>sUSDe</td><td><a href="https://berascan.com/token/0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2">0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2</a></td></tr><tr><td>11</td><td>stBTC</td><td><a href="https://berascan.com/token/0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3">0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3</a></td></tr><tr><td>12</td><td>STONE</td><td><a href="https://berascan.com/token/0xEc901DA9c68E90798BbBb74c11406A32A70652C3">0xEc901DA9c68E90798BbBb74c11406A32A70652C3</a></td></tr><tr><td>13</td><td>uniBTC</td><td><a href="https://berascan.com/token/0xC3827A4BC8224ee2D116637023b124CED6db6e90">0xC3827A4BC8224ee2D116637023b124CED6db6e90</a></td></tr><tr><td>14</td><td>USDe</td><td><a href="https://berascan.com/token/0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34">0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34</a></td></tr><tr><td>15</td><td>ylBTCLST</td><td><a href="https://berascan.com/token/0xE946Dd7d03F6F5C440F68c84808Ca88d26475FC5">0xE946Dd7d03F6F5C440F68c84808Ca88d26475FC5</a></td></tr><tr><td>16</td><td>ylpumpBTC</td><td><a href="https://berascan.com/token/0xdCB3D91555385DaE23e6B966b5626aa7A75Be940">0xdCB3D91555385DaE23e6B966b5626aa7A75Be940</a></td></tr><tr><td>17</td><td>ylstETH</td><td><a href="https://berascan.com/token/0xa958090601E21A82e9873042652e35891D945a8C">0xa958090601E21A82e9873042652e35891D945a8C</a></td></tr><tr><td>18</td><td>beraETH</td><td><a href="https://berascan.com/token/0x6fc6545d5cDE268D5C7f1e476D444F39c995120d">0x6fc6545d5cDE268D5C7f1e476D444F39c995120d</a></td></tr><tr><td>19</td><td>NECT</td><td><a href="https://berascan.com/token/0x1cE0a25D13CE4d52071aE7e02Cf1F6606F4C79d3">0x1cE0a25D13CE4d52071aE7e02Cf1F6606F4C79d3</a></td></tr><tr><td>20</td><td>pumpBTC.bera</td><td><a href="https://berascan.com/token/0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E">0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E</a></td></tr><tr><td>21</td><td>rsETH</td><td><a href="https://berascan.com/token/0x4186BFC76E2E237523CBC30FD220FE055156b41F">0x4186BFC76E2E237523CBC30FD220FE055156b41F</a></td></tr><tr><td>22</td><td>sUSDa</td><td><a href="https://berascan.com/token/0x2840F9d9f96321435Ab0f977E7FDBf32EA8b304f">0x2840F9d9f96321435Ab0f977E7FDBf32EA8b304f</a></td></tr><tr><td>23</td><td>SolvBTC</td><td><a href="https://berascan.com/token/0x541FD749419CA806a8bc7da8ac23D346f2dF8B77">0x541FD749419CA806a8bc7da8ac23D346f2dF8B77</a></td></tr><tr><td>24</td><td>xSolvBTC</td><td><a href="https://berascan.com/token/0xCC0966D8418d412c599A6421b760a847eB169A8c">0xCC0966D8418d412c599A6421b760a847eB169A8c</a></td></tr><tr><td>25</td><td>USDa</td><td><a href="https://berascan.com/token/0xff12470a969Dd362EB6595FFB44C82c959Fe9ACc">0xff12470a969Dd362EB6595FFB44C82c959Fe9ACc</a></td></tr><tr><td>26</td><td>USD0</td><td><a href="https://berascan.com/token/0x91a6aF4C8Cb1673AB0D776828b6B271AC3dA9DcB">0x91a6aF4C8Cb1673AB0D776828b6B271AC3dA9DcB</a></td></tr><tr><td>27</td><td>USD0++</td><td><a href="https://berascan.com/token/0x30Ea2d525eF7C234F8AA6E3a8909B88f71244cB0">0x30Ea2d525eF7C234F8AA6E3a8909B88f71244cB0</a></td></tr><tr><td>28</td><td>eBTC</td><td><a href="https://berascan.com/token/0x657e8C867D8B37dCC18fA4Caead9C45EB088C642">0x657e8C867D8B37dCC18fA4Caead9C45EB088C642</a></td></tr><tr><td>29</td><td>weETH</td><td><a href="https://berascan.com/token/0x7DCC39B4d1C53CB31e1aBc0e358b43987FEF80f7">0x7DCC39B4d1C53CB31e1aBc0e358b43987FEF80f7</a></td></tr><tr><td>30</td><td>OHM</td><td><a href="https://berascan.com/token/0x18878Df23e2a36f81e820e4b47b4A40576D3159C">0x18878Df23e2a36f81e820e4b47b4A40576D3159C</a></td></tr><tr><td>31</td><td>srUSD</td><td><a href="https://berascan.com/token/0x5475611Dffb8ef4d697Ae39df9395513b6E947d7">0x5475611Dffb8ef4d697Ae39df9395513b6E947d7</a></td></tr><tr><td>32</td><td>HENLO</td><td><a href="https://berascan.com/token/0xb2F776e9c1C926C4b2e54182Fac058dA9Af0B6A5">0xb2F776e9c1C926C4b2e54182Fac058dA9Af0B6A5</a></td></tr><tr><td>33</td><td>iBERA</td><td><a href="https://berascan.com/token/0x9b6761bf2397Bb5a6624a856cC84A3A14Dcd3fe5">0x9b6761bf2397Bb5a6624a856cC84A3A14Dcd3fe5</a></td></tr><tr><td>34</td><td>iBGT</td><td><a href="https://berascan.com/token/0xac03CABA51e17c86c921E1f6CBFBdC91F8BB2E6b">0xac03CABA51e17c86c921E1f6CBFBdC91F8BB2E6b</a></td></tr><tr><td>35</td><td>DOLO</td><td><a href="https://berascan.com/token/0x0f81001ef0a83ecce5ccebf63eb302c70a39a654">0x0F81001eF0A83ecCE5ccebf63EB302c70a39a654</a></td></tr><tr><td>36</td><td>deUSD</td><td><a href="https://berascan.com/token/0x7203fB920421170Cc4Da001d758fdE8f391A0570">0x7203fB920421170Cc4Da001d758fdE8f391A0570</a></td></tr><tr><td>37</td><td>sdeUSD</td><td><a href="https://berascan.com/token/0xAF51434Ac57f05e0Bc397739c15CF653dbdBd86D">0xAF51434Ac57f05e0Bc397739c15CF653dbdBd86D</a></td></tr><tr><td>38</td><td><a data-footnote-ref href="#user-content-fn-40">siBGT</a></td><td><a href="https://berascan.com/token/0x589B3B5E75D5475908C6C2EBD1F2f68eeCA52eE4">0x589B3B5E75D5475908C6C2EBD1F2f68eeCA52eE4</a></td></tr><tr><td>39</td><td><a data-footnote-ref href="#user-content-fn-41">pol-rUSD</a></td><td><a href="https://berascan.com/token/0x5DB5ef3D657471d991e4de09983D2c92b0609749">0x5DB5ef3D657471d991e4de09983D2c92b0609749</a></td></tr><tr><td>40</td><td>BYUSD</td><td><a href="https://berascan.com/token/0x688e72142674041f8f6Af4c808a4045cA1D6aC82">0x688e72142674041f8f6Af4c808a4045cA1D6aC82</a></td></tr><tr><td>41</td><td>oriBGT</td><td><a href="https://berascan.com/token/0x69f1E971257419B1E9C405A553f252c64A29A30a">0x69f1E971257419B1E9C405A553f252c64A29A30a</a></td></tr><tr><td>42</td><td>sWBERA</td><td><a href="https://berascan.com/token/0x118D2cEeE9785eaf70C15Cd74CD84c9f8c3EeC9a">0x118D2cEeE9785eaf70C15Cd74CD84c9f8c3EeC9a</a></td></tr><tr><td>43</td><td>PT-iBGT (Dec 2025)</td><td><a href="https://berascan.com/token/0xc2c7ded5837f911b7efe5984b52182036fd66a20">0xc2c7ded5837f911b7efe5984b52182036fd66a20</a></td></tr><tr><td>44</td><td>wgBERA</td><td><a href="https://berascan.com/token/0xD77552D3849ab4D8C3b189A9582d0ba4C1F4f912">0xD77552D3849ab4D8C3b189A9582d0ba4C1F4f912</a></td></tr><tr><td>45</td><td>IR</td><td><a href="https://berascan.com/token/0xa1B644AEC990Ad6023811cED36E6A2d6D128C7C9">0xa1B644AEC990Ad6023811cED36E6A2d6D128C7C9</a></td></tr><tr><td>46</td><td>KDK</td><td><a href="https://berascan.com/token/0xc0D1aC00A30fA4e30e44AFc7313d6312c87E21dF">0xc0D1aC00A30fA4e30e44AFc7313d6312c87E21dF</a></td></tr><tr><td>47</td><td>savUSD</td><td><a href="https://berascan.com/token/0xa744Fe3688291aC3A4a7eC917678783aD9946a1E">0xa744Fe3688291aC3A4a7eC917678783aD9946a1E</a></td></tr></tbody></table>

### Botanix

<table><thead><tr><th width="128.333251953125">Market ID</th><th width="154">Asset</th><th>Address</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td><a href="https://botanixscan.io/token/0x3292c42e8E9Ab3C6a12CFdA556BbCB6f113B1E28?chainid=3637">0x3292c42e8E9Ab3C6a12CFdA556BbCB6f113B1E28</a></td></tr><tr><td>1</td><td>pBTC</td><td><a href="https://botanixscan.io/token/0x0D2437F93Fed6EA64Ef01cCde385FB1263910C56?chainid=3637">0x0D2437F93Fed6EA64Ef01cCde385FB1263910C56</a></td></tr><tr><td>2</td><td>USDC</td><td><a href="https://botanixscan.io/token/0x29eE6138DD4C9815f46D34a4A1ed48F46758A402?chainid=3637">0x29eE6138DD4C9815f46D34a4A1ed48F46758A402</a></td></tr><tr><td>3</td><td>stBTC</td><td><a href="https://botanixscan.io/token/0xF4586028FFdA7Eca636864F80f8a3f2589E33795?chainid=3637">0xF4586028FFdA7Eca636864F80f8a3f2589E33795</a></td></tr><tr><td>4</td><td>USDT</td><td><a href="https://botanixscan.io/token/0x1217bfe6c773eec6cc4a38b5dc45b92292b6e189?chainid=3637">0x1217bfe6c773eec6cc4a38b5dc45b92292b6e189</a></td></tr></tbody></table>

### Ethereum Mainnet

<table><thead><tr><th width="128">Market ID</th><th width="154">Asset</th><th>Address</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td><a href="https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2">0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2</a></td></tr><tr><td>1</td><td>USD1</td><td><a href="https://etherscan.io/address/0x8d0D000Ee44948FC98c9B98A4FA4921476f08B0d">0x8d0D000Ee44948FC98c9B98A4FA4921476f08B0d</a></td></tr><tr><td>2</td><td>USDC</td><td><a href="https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48">0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48</a></td></tr><tr><td>3</td><td>LINK</td><td><a href="https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA">0x514910771AF9Ca656af840dff83E8264EcF986CA</a></td></tr><tr><td>4</td><td>WBTC</td><td><a href="https://etherscan.io/address/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599">0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599</a></td></tr><tr><td>5</td><td>USDT</td><td><a href="https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7">0xdAC17F958D2ee523a2206206994597C13D831ec7</a></td></tr><tr><td>6</td><td>weETH</td><td><a href="https://etherscan.io/address/0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee">0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee</a></td></tr><tr><td>7</td><td>CRV</td><td><a href="https://etherscan.io/address/0xD533a949740bb3306d119CC777fa900bA034cd52">0xD533a949740bb3306d119CC777fa900bA034cd52</a></td></tr><tr><td>8</td><td>AAVE</td><td><a href="https://etherscan.io/address/0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9">0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9</a></td></tr><tr><td>9</td><td>sUSDe</td><td><a href="https://etherscan.io/address/0x9D39A5DE30e57443BfF2A8307A4256c8797A3497">0x9D39A5DE30e57443BfF2A8307A4256c8797A3497</a></td></tr><tr><td>10</td><td>srUSD</td><td><a href="https://etherscan.io/address/0x738d1115B90efa71AE468F1287fc864775e23a31">0x738d1115B90efa71AE468F1287fc864775e23a31</a></td></tr><tr><td>11</td><td>rUSD</td><td><a href="https://etherscan.io/address/0x09D4214C03D01F49544C0448DBE3A27f768F2b34">0x09D4214C03D01F49544C0448DBE3A27f768F2b34</a></td></tr><tr><td>12</td><td>mETH</td><td><a href="https://etherscan.io/token/0xd5f7838f5c461feff7fe49ea5ebaf7728bb0adfa">0xd5F7838F5C461fefF7FE49ea5ebaF7728bB0ADfa</a></td></tr><tr><td>13</td><td>WLFI</td><td><a href="https://etherscan.io/token/0xda5e1988097297dcdc1f90d4dfe7909e847cbef6">0xdA5e1988097297dCdc1f90D4dFE7909e847CBeF6</a></td></tr><tr><td>14</td><td>cUSD</td><td><a href="https://etherscan.io/token/0xcCcc62962d17b8914c62D74FfB843d73B2a3cccC">0xcCcc62962d17b8914c62D74FfB843d73B2a3cccC</a></td></tr><tr><td>15</td><td>stcUSD</td><td><a href="https://etherscan.io/token/0x88887bE419578051FF9F4eb6C858A951921D8888">0x88887bE419578051FF9F4eb6C858A951921D8888</a></td></tr><tr><td>16</td><td>DOLO</td><td><a href="https://etherscan.io/token/0x0F81001eF0A83ecCE5ccebf63EB302c70a39a654">0x0F81001eF0A83ecCE5ccebf63EB302c70a39a654</a></td></tr><tr><td>17</td><td>solvBTC</td><td><a href="https://etherscan.io/token/0x7A56E1C57C7475CCf742a1832B028F0456652F97">0x7A56E1C57C7475CCf742a1832B028F0456652F97</a></td></tr><tr><td>18</td><td>cbBTC</td><td><a href="https://etherscan.io/token/0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf">0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf</a></td></tr><tr><td>19</td><td>wsrUSD</td><td><a href="https://etherscan.io/token/0xd3fD63209FA2D55B07A0f6db36C2f43900be3094">0xd3fD63209FA2D55B07A0f6db36C2f43900be3094</a></td></tr></tbody></table>

### Mantle

<table><thead><tr><th width="128">Market ID</th><th width="154">Asset</th><th>Address</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td><a href="https://mantlescan.xyz/token/0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111">0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111</a></td></tr><tr><td>1</td><td>WMNT</td><td><a href="https://mantlescan.xyz/token/0x78c1b0C915c4FAA5FffA6CAbf0219DA63d7f4cb8">0x78c1b0C915c4FAA5FffA6CAbf0219DA63d7f4cb8</a></td></tr><tr><td>2</td><td>USDC</td><td><a href="https://mantlescan.xyz/token/0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9">0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9</a></td></tr><tr><td>3</td><td>WBTC</td><td><a href="https://mantlescan.xyz/token/0xCAbAE6f6Ea1ecaB08Ad02fE02ce9A44F09aebfA2">0xCAbAE6f6Ea1ecaB08Ad02fE02ce9A44F09aebfA2</a></td></tr><tr><td>4</td><td>USDT</td><td><a href="https://mantlescan.xyz/token/0x201EBa5CC46D216Ce6DC03F6a759e8E766e956aE">0x201EBa5CC46D216Ce6DC03F6a759e8E766e956aE</a></td></tr><tr><td>5</td><td>mETH</td><td><a href="https://mantlescan.xyz/token/0xcDA86A272531e8640cD7F1a92c01839911B90bb0">0xcDA86A272531e8640cD7F1a92c01839911B90bb0</a></td></tr><tr><td>6</td><td>USDe</td><td><a href="https://mantlescan.xyz/token/0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34">0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34</a></td></tr><tr><td>7</td><td><a data-footnote-ref href="#user-content-fn-42">PT-USDe *</a> (Jul 2024)</td><td><a href="https://mantlescan.xyz/token/0xB3fF983d7927540B7f92602657a2a26977664e77">0xB3fF983d7927540B7f92602657a2a26977664e77</a></td></tr><tr><td>8</td><td>USDY</td><td><a href="https://mantlescan.xyz/token/0x5bE26527e817998A7206475496fDE1E68957c5A6">0x5bE26527e817998A7206475496fDE1E68957c5A6</a></td></tr><tr><td>9</td><td><a data-footnote-ref href="#user-content-fn-43">sMNT</a></td><td><a href="https://mantlescan.xyz/token/0x6b68bdccb22931937d7d11e556d95a07e02fe3ce">0x6B68bDCCb22931937d7D11e556d95a07E02fE3CE</a></td></tr><tr><td>10</td><td><a data-footnote-ref href="#user-content-fn-44">PT-USDe *</a> (Dec 2024)</td><td><a href="https://mantlescan.xyz/token/0xeC0Ad37432b489C40ED6da003B2C2F033928599E">0xeC0Ad37432b489C40ED6da003B2C2F033928599E</a></td></tr><tr><td>11</td><td><a data-footnote-ref href="#user-content-fn-45">PT-mETH *</a> (Dec 2024)</td><td><a href="https://mantlescan.xyz/token/0x5b12E419A57e3102eC1d47BD11BA5EC87EF264fb">0x5b12E419A57e3102eC1d47BD11BA5EC87EF264fb</a></td></tr><tr><td>12</td><td><a data-footnote-ref href="#user-content-fn-46">PT-MNT *</a> (Oct 2024)</td><td><a href="https://mantlescan.xyz/token/0xe44CEFD2E6b0B846e2720e7b823e173d9FDf8601">0xe44CEFD2E6b0B846e2720e7b823e173d9FDf8601</a></td></tr><tr><td>13</td><td>FBTC</td><td><a href="https://mantlescan.xyz/token/0xC96dE26018A54D51c097160568752c4E3BD6C364">0xC96dE26018A54D51c097160568752c4E3BD6C364</a></td></tr><tr><td>14</td><td>cmETH</td><td><a href="https://mantlescan.xyz/token/0xE6829d9a7eE3040e1276Fa75293Bde931859e8fA">0xE6829d9a7eE3040e1276Fa75293Bde931859e8fA</a></td></tr><tr><td>15</td><td><a data-footnote-ref href="#user-content-fn-47">PT-cmETH *</a> (Feb 2025)</td><td><a href="https://mantlescan.xyz/token/0x8eB2eF96a70A6eC4F3dDE550b96969a6AA25a563">0x8eB2eF96a70A6eC4F3dDE550b96969a6AA25a563</a></td></tr></tbody></table>

### Polygon zkEVM

<table><thead><tr><th width="128">Market ID</th><th width="154">Asset</th><th>Address</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td><a href="https://zkevm.polygonscan.com/token/0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9">0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9</a></td></tr><tr><td>1</td><td>DAI</td><td><a href="https://zkevm.polygonscan.com/token/0xC5015b9d9161Dca7e18e32f6f25C4aD850731Fd4">0xC5015b9d9161Dca7e18e32f6f25C4aD850731Fd4</a></td></tr><tr><td>2</td><td><a data-footnote-ref href="#user-content-fn-48"><del>USDC</del></a></td><td><a href="https://zkevm.polygonscan.com/token/0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035"><del>0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035</del></a></td></tr><tr><td>3</td><td>LINK</td><td><a href="https://zkevm.polygonscan.com/token/0x4B16e4752711A7ABEc32799C976F3CeFc0111f2B">0x4B16e4752711A7ABEc32799C976F3CeFc0111f2B</a></td></tr><tr><td>4</td><td>WBTC</td><td><a href="https://zkevm.polygonscan.com/token/0xEA034fb02eB1808C2cc3adbC15f447B93CbE08e1">0xEA034fb02eB1808C2cc3adbC15f447B93CbE08e1</a></td></tr><tr><td>5</td><td>USDT</td><td><a href="https://zkevm.polygonscan.com/token/0x1E4a5963aBFD975d8c9021ce480b42188849D41d">0x1E4a5963aBFD975d8c9021ce480b42188849D41d</a></td></tr><tr><td>6</td><td>MATIC</td><td><a href="https://zkevm.polygonscan.com/token/0xa2036f0538221a77A3937F1379699f44945018d0">0xa2036f0538221a77A3937F1379699f44945018d0</a></td></tr><tr><td>7</td><td>USDC.E</td><td><a href="https://zkevm.polygonscan.com/token/0x37eAA0eF3549a5Bb7D431be78a3D99BD360d19e5">0x37eAA0eF3549a5Bb7D431be78a3D99BD360d19e5</a></td></tr></tbody></table>

### X Layer

<table><thead><tr><th width="128">Market ID</th><th width="154">Asset</th><th>Address</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td><a href="https://www.oklink.com/xlayer/token/0x5A77f1443D16ee5761d310e38b62f77f726bC71c">0x5A77f1443D16ee5761d310e38b62f77f726bC71c</a></td></tr><tr><td>1</td><td>WOKB</td><td><a href="https://www.oklink.com/xlayer/token/0xe538905cf8410324e03A5A23C1c177a474D59b2b">0xe538905cf8410324e03a5a23c1c177a474d59b2b</a></td></tr><tr><td>2</td><td>USDC</td><td><a href="https://www.oklink.com/xlayer/token/0x74b7F16337b8972027F6196A17a631aC6dE26d22">0x74b7f16337b8972027f6196a17a631ac6de26d22</a></td></tr><tr><td>3</td><td>WBTC</td><td><a href="https://www.oklink.com/xlayer/token/0xEA034fb02eB1808C2cc3adbC15f447B93CbE08e1">0xea034fb02eb1808c2cc3adbc15f447b93cbe08e1</a></td></tr><tr><td>4</td><td>USDT</td><td><a href="https://www.oklink.com/xlayer/token/0x1E4a5963aBFD975d8c9021ce480b42188849D41d">0x1e4a5963abfd975d8c9021ce480b42188849d41d</a></td></tr></tbody></table>

{% hint style="info" %}
Asterisks (\*) denote assets in [Isolation Mode](/risk-management#isolation-mode), which wrap around an underlying token to improve the risk management of Dolomite. Assets in `Isolation Mode` have a `d` prepended to their symbol to denote being a Dolomite wrapped asset. Click on the asterisk to see the underlying token address.
{% endhint %}

## Adding New Markets

Only the protocol administrator can list new markets. Over time, the DAO will have the right to add assets as well as a listing committee through an ownership adapter (dynamically or via committee decision). The committee will be appointed by the DAO and will be able to stay agile with the fast-paced environment on Arbitrum or other chains where Dolomite is deployed.

[^1]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for fsGLP is [0x1aDDD80E6039594eE970E5872D247bf0414C8903](https://arbiscan.io/token/0x1aDDD80E6039594eE970E5872D247bf0414C8903).

[^2]:

[^3]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for plvGLP is [0x5326E71Ff593Ecc2CF7AcaE5Fe57582D6e74CFF1](https://arbiscan.io/address/0x5326e71ff593ecc2cf7acae5fe57582d6e74cff1).

[^4]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for jUSDC is [0xe66998533a1992ecE9eA99cDf47686F4fc8458E0](https://arbiscan.io/address/0xe66998533a1992ece9ea99cdf47686f4fc8458e0).

[^5]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-GLP is [0x96015d0fb97139567a9ba675951816a0bb719e3c](https://arbiscan.io/address/0x96015d0fb97139567a9ba675951816a0bb719e3c).

[^6]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for YT-GLP is [0x56051f8e46b67b4d286454995dBC6F5f3C433E34](https://arbiscan.io/token/0x56051f8e46b67b4d286454995dBC6F5f3C433E34).

[^7]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-rETH is [0x685155D3BD593508Fe32Be39729810A591ED9c87](https://arbiscan.io/token/0x685155d3bd593508fe32be39729810a591ed9c87).

[^8]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-wstETH is [0x9741CAc1a22Ff3615FA074fD0B439975a5E137e9](https://arbiscan.io/token/0x9741cac1a22ff3615fa074fd0b439975a5e137e9).

[^9]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-wstETH is [0x1255638EFeca62e12E344E0b6B22ea853eC6e2c7](https://arbiscan.io/token/0x1255638efeca62e12e344e0b6b22ea853ec6e2c7).

[^10]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for vARB is ARB - [0x912ce59144191c1204e64559fe8253a0e49e6548](https://arbiscan.io/token/0x912ce59144191c1204e64559fe8253a0e49e6548).

[^11]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for sGMX is GMX - [0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a](https://arbiscan.io/token/0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a).

[^12]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: ARB-USD is [0xC25cEf6061Cf5dE5eb761b50E4743c1F5D7E5407](https://arbiscan.io/token/0xC25cEf6061Cf5dE5eb761b50E4743c1F5D7E5407).

[^13]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: BTC-USD is [0x47c031236e19d024b42f8AE6780E44A573170703](https://arbiscan.io/token/0x47c031236e19d024b42f8AE6780E44A573170703).

[^14]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: ETH-USD is [0x70d95587d40A2caf56bd97485aB3Eec10Bee6336](https://arbiscan.io/token/0x70d95587d40A2caf56bd97485aB3Eec10Bee6336).

[^15]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: LINK-USD is [0x7f1fa204bb700853D36994DA19F830b6Ad18455C](https://arbiscan.io/token/0x7f1fa204bb700853D36994DA19F830b6Ad18455C).

[^16]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-eETH is [0x9becd6b4fb076348a455518aea23d3799361fe95](https://arbiscan.io/token/0x9becd6b4fb076348a455518aea23d3799361fe95).

[^17]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-ezETH is [0x8ea5040d423410f1fdc363379af88e1db5ea1c34](https://arbiscan.io/token/0x8ea5040d423410f1fdc363379af88e1db5ea1c34).

[^18]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-GLP is [0x89cD713a6607787F93d6743E67777Be9Ad73c54b](https://arbiscan.io/token/0x89cd713a6607787f93d6743e67777be9ad73c54b).

[^19]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-eETH is [0x1c27ad8a19ba026adabd615f6bc77158130cfbe4](https://arbiscan.io/token/0x1c27ad8a19ba026adabd615f6bc77158130cfbe4).

[^20]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for jUSDC V2 is [0xB0BDE111812EAC913b392D80D51966eC977bE3A2](https://arbiscan.io/token/0xB0BDE111812EAC913b392D80D51966eC977bE3A2).

[^21]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: BTC is [0x7C11F78Ce78768518D743E81Fdfa2F860C6b9A77](https://arbiscan.io/token/0x7C11F78Ce78768518D743E81Fdfa2F860C6b9A77).

[^22]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: ETH is [0x450bb6774Dd8a756274E0ab4107953259d2ac541](https://arbiscan.io/token/0x450bb6774Dd8a756274E0ab4107953259d2ac541).

[^23]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: UNI-USD is [0xc7Abb2C5f3BF3CEB389dF0Eecd6120D451170B50](https://arbiscan.io/token/0xc7Abb2C5f3BF3CEB389dF0Eecd6120D451170B50).

[^24]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-eETH is [0xb8b0a120F6A68Dd06209619F62429fB1a8e92feC](https://arbiscan.io/token/0xb8b0a120F6A68Dd06209619F62429fB1a8e92feC).

[^25]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-ezETH is [0x2CCFce9bE49465CC6f947b5F6aC9383673733Da9](https://arbiscan.io/token/0x2CCFce9bE49465CC6f947b5F6aC9383673733Da9).

[^26]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-rsETH is [0x30c98c0139B62290E26aC2a2158AC341Dcaf1333](https://arbiscan.io/token/0x30c98c0139B62290E26aC2a2158AC341Dcaf1333).

[^27]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: AAVE-USD is [0x1CbBa6346F110c8A5ea739ef2d1eb182990e4EB2](https://arbiscan.io/token/0x1CbBa6346F110c8A5ea739ef2d1eb182990e4EB2).

[^28]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: DOGE-USD is [0x6853EA96FF216fAb11D2d930CE3C508556A4bdc4](https://arbiscan.io/token/0x6853EA96FF216fAb11D2d930CE3C508556A4bdc4).

[^29]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: GMX-USD is [0x55391D178Ce46e7AC8eaAEa50A72D1A5a8A622Da](https://arbiscan.io/token/0x55391D178Ce46e7AC8eaAEa50A72D1A5a8A622Da).

[^30]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: SOL-USD is [0x09400D9DB990D5ed3f35D7be61DfAEB900Af03C9](https://arbiscan.io/token/0x09400D9DB990D5ed3f35D7be61DfAEB900Af03C9).

[^31]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: wstETH-USD is [0x0Cf1fb4d1FF67A3D8Ca92c9d6643F8F9be8e03E5](https://arbiscan.io/token/0x0Cf1fb4d1FF67A3D8Ca92c9d6643F8F9be8e03E5).

[^32]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-eETH is [0xE2B2D203577c7cb3D043E89cCf90b5E24d19b66f](https://arbiscan.io/token/0xE2B2D203577c7cb3D043E89cCf90b5E24d19b66f).

[^33]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-rsETH is [0x355ec27c9d4530dE01A103FA27F884a2F3dA65ef](https://arbiscan.io/token/0x355ec27c9d4530dE01A103FA27F884a2F3dA65ef).

[^34]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: GMX is [0xbD48149673724f9cAeE647bb4e9D9dDaF896Efeb](https://arbiscan.io/token/0xbD48149673724f9cAeE647bb4e9D9dDaF896Efeb).

[^35]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: PENDLE-USD is [0x784292E87715d93afD7cb8C941BacaFAAA9A5102](https://arbiscan.io/address/0x784292E87715d93afD7cb8C941BacaFAAA9A5102).

[^36]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: PEPE-USD is [0x2b477989A149B17073D9C9C82eC9cB03591e20c6](https://arbiscan.io/token/0x2b477989A149B17073D9C9C82eC9cB03591e20c6).

[^37]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GM: WIF-USD is [0x0418643F94Ef14917f1345cE5C460C37dE463ef7](https://arbiscan.io/token/0x0418643F94Ef14917f1345cE5C460C37dE463ef7).

[^38]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GLV-BTC is [0xdF03EEd325b82bC1d4Db8b49c30ecc9E05104b96](https://arbiscan.io/token/0xdF03EEd325b82bC1d4Db8b49c30ecc9E05104b96).

[^39]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for GLV-ETH is [0x528A5bac7E746C9A509A1f4F6dF58A03d44279F9](https://arbiscan.io/token/0x528A5bac7E746C9A509A1f4F6dF58A03d44279F9).

[^40]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for siBGT is [0xac03CABA51e17c86c921E1f6CBFBdC91F8BB2E6b](https://berascan.com/token/0xac03CABA51e17c86c921E1f6CBFBdC91F8BB2E6b).

[^41]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for pol-rUSD is [0x3000C6BF0AAEb813e252B584c4D9a82f99e7a71D](https://berascan.com/address/0x3000C6BF0AAEb813e252B584c4D9a82f99e7a71D).

[^42]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-USDe is [0xba567Cf0d8230c0AD8D8bFc50E587E06d6F118E9](https://mantlescan.xyz/token/0xba567Cf0d8230c0AD8D8bFc50E587E06d6F118E9).

[^43]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for sMNT is [0x78c1b0C915c4FAA5FffA6CAbf0219DA63d7f4cb8](https://mantlescan.xyz/token/0x78c1b0C915c4FAA5FffA6CAbf0219DA63d7f4cb8).

[^44]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-USDe is [0x8be66A48EA1f4AFF89cd2beb50B02D901Dfb9584](https://mantlescan.xyz/token/0x8be66A48EA1f4AFF89cd2beb50B02D901Dfb9584).

[^45]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-mETH is [0x1333B49BBdD06544a25647f9127358D9A9486105](https://mantlescan.xyz/token/0x1333B49BBdD06544a25647f9127358D9A9486105).

[^46]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-MNT is [0xC57c7Be308cf2f52dcF095d8D4C67d5984270da0](https://mantlescan.xyz/token/0xC57c7Be308cf2f52dcF095d8D4C67d5984270da0).

[^47]: This asset is in [Isolation Mode](/risk-management#isolation-mode). The actual token for PT-cmETH is [0xEbf4ff21459fEcf96e36CF1dd00db01367254Bcd](https://mantlescan.xyz/token/0xEbf4ff21459fEcf96e36CF1dd00db01367254Bcd).

[^48]: This market is deprecated


# Risk Management

Dolomite has an expressive system for managing the protocol's risks.

## Price Oracles

Dolomite leverages Chainlink price oracles wherever possible in its collateral calculations for ordinary assets.  Dolomite's usage and collaboration with Chainlink through the BUILD program is documented in the following [press release](https://medium.com/dolomite-official/dolomite-joins-chainlink-build-to-supercharge-the-adoption-of-our-margin-protocol-b4d69810bb44) about joining the program.&#x20;

Some unique assets, like `GLP`, require some extra calculations and precaution when marking the value of it as collateral. After accounting for any additional business logic required for a unique asset, common collateral calculations then done through Chainlink, as usual.

### Arbitrum One

<table><thead><tr><th width="122.33333333333331">Market ID</th><th width="176">Asset</th><th>Oracle Type</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td>Chainlink (Market Price)</td></tr><tr><td>1</td><td>DAI</td><td>Chainlink (Market Price)</td></tr><tr><td>2</td><td>USDC.e</td><td>Chainlink (Market Price)</td></tr><tr><td>3</td><td>LINK</td><td>Chainlink (Market Price)</td></tr><tr><td>4</td><td>WBTC</td><td>Chainlink (Market Price)</td></tr><tr><td>5</td><td>USDT</td><td>Chainlink (Market Price)</td></tr><tr><td>6</td><td>GLP</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>7</td><td>ARB</td><td>Chainlink (Market Price)</td></tr><tr><td>8</td><td>magicGLP</td><td>mGLP -> GLP - Chainlink (Automation)<br>GLP -> USD - Algorithmic + Chainlink (Market Price)</td></tr><tr><td>9</td><td>plvGLP</td><td>Algorithmic + Chainlink (Automation)</td></tr><tr><td><del>10</del></td><td><del>jUSDC</del></td><td><del>jUSDC -> USDC - Chainlink (Automation)</del><br><del>USDC -> USD - Chainlink (Market Price)</del></td></tr><tr><td><del>11</del></td><td><del>PT-GLP (Mar 2024)</del></td><td><del>PT-GLP -> GLP - Pendle TWAP</del><br><del>GLP -> USD - Algorithmic + Chainlink (Market Price)</del></td></tr><tr><td>12</td><td>UNI</td><td>Chainlink (Market Price)</td></tr><tr><td>13</td><td>MIM</td><td>Chainlink (Market Price)</td></tr><tr><td>14</td><td>wstETH</td><td><p>wstETH -> stETH - Chainlink (Exchange Rate)</p><p>stETH -> ETH - Chainlink (Market Price)</p><p>ETH -> USD - Chainlink (Market Price)</p></td></tr><tr><td>15</td><td>rETH</td><td>rETH -> ETH - Chainlink (Exchange Rate)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td><del>16</del></td><td><del>YT-GLP (Mar 2024)</del></td><td><del>YT-GLP -> GLP - Invert Pendle TWAP</del><br><del>GLP -> USD - Algorithmic + Chainlink (Market Price)</del></td></tr><tr><td>17</td><td>USDC</td><td>Chainlink (Market Price)</td></tr><tr><td>18</td><td>GRAIL</td><td>GRAIL -> ETH/USDC - Camelot TWAP<br>ETH/USDC -> USD - Chainlink (Market Price)</td></tr><tr><td>19</td><td>MAGIC</td><td>Chainlink (Market Price)</td></tr><tr><td><del>20</del></td><td><del>DPX</del></td><td><del>Camelot TWAP</del></td></tr><tr><td>21</td><td>PENDLE</td><td>Chainlink (Market Price)</td></tr><tr><td>22</td><td>PT-rETH (Jun 2025)</td><td>PT-rETH -> rETH Pendle TWAP<br>rETH -> ETH Chainlink (Exchange Rate)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>23</td><td>PT-stETH (Jun 2024)</td><td>PT-stETH -> stETH Pendle TWAP<br>stETH -> ETH Chainlink (Market Price)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>24</td><td>PT-stETH (Jun 2025)</td><td>PT-stETH -> stETH Pendle TWAP<br>stETH -> ETH Chainlink (Market Price)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>25</td><td>JONES</td><td>JONES -> ETH/USDC - Camelot TWAP<br>ETH/USDC -> USD - Chainlink (Market Price)</td></tr><tr><td>26</td><td>PREMIA</td><td>PREMIA -> ETH/USDC - Camelot TWAP<br>ETH/USDC -> USD - Chainlink (Market Price)</td></tr><tr><td>27</td><td>RDNT</td><td>Chainlink (Market Price)</td></tr><tr><td>28</td><td>vARB</td><td>Chainlink (Market Price)</td></tr><tr><td>29</td><td>GMX</td><td>Chainlink (Market Price)</td></tr><tr><td>30</td><td>Staked-GMX</td><td>Chainlink (Market Price)</td></tr><tr><td>31</td><td>GM: ARB-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>32</td><td>GM: BTC-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>33</td><td>GM: ETH-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>34</td><td>GM: LINK-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>35</td><td>weETH</td><td>weETH -> ETH - Chainlink (Market Price)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>36</td><td>PT-eETH (Apr 2024)</td><td>PT-eETH -> eETH - Pendle TWAP<br>eETH -> weETH - Chainlink (Exchange Rate)<br>weETH -> ETH - Chainlink (Market Price)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>37</td><td>ezETH</td><td>ezETH -> ETH - Chainlink (Exchange Rate)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>38</td><td>PT-ezETH (Jun 2024)</td><td>PT-ezETH -> ezETH - Pendle TWAP<br>ezETH -> ETH - Chainlink (Exchange Rate)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>39</td><td>XAI</td><td>Chainlink (Market Price)</td></tr><tr><td>40</td><td>sGLP</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>41</td><td>PT-GLP (Sep 2024)</td><td>PT-GLP -> GLP - Pendle TWAP<br>GLP -> USD - Algorithmic + Chainlink (Market Price)</td></tr><tr><td>42</td><td>PT-eETH (Jun 2024)</td><td>PT-eETH -> eETH - Pendle TWAP<br>eETH -> weETH - Chainlink (Exchange Rate)<br>weETH -> ETH - Chainlink (Market Price)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>43</td><td>jUSDC V2</td><td>jUSDC V2 -> USDC - Chainlink (Automation)<br>USDC -> USD -> Chainlink (Market Price)</td></tr><tr><td>44</td><td>GM: BTC</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>45</td><td>GM: ETH</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>46</td><td>GRAI</td><td>Ramses TWAP</td></tr><tr><td>47</td><td>GM: UNI-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>48</td><td>wUSDM</td><td>Chronicle (Market Price)</td></tr><tr><td>49</td><td>rsETH</td><td>rsETH -> ETH - Chainlink (Exchange Rate)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>50</td><td>PT-eETH (Sep 2024)</td><td>PT-eETH -> eETH - Pendle TWAP<br>eETH -> weETH - Chainlink (Exchange Rate)<br>weETH -> ETH - Chainlink (Market Price)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>51</td><td>PT-ezETH (Sep 2024)</td><td>PT-ezETH -> ezETH - Pendle TWAP<br>ezETH -> ETH - Chainlink (Exchange Rate)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>52</td><td>PT-rsETH (Sep 2024)</td><td>PT-rsETH -> rsETH - Pendle TWAP<br>rsETH -> ETH - Chainlink (Market Price)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td><del>53</del></td><td><del>wOETH</del></td><td><del>wOETH -> ETH - Chainlink (Market Price)</del><br><del>ETH -> USD - Chainlink (Market Price)</del></td></tr><tr><td>54</td><td>USDe</td><td>USDe -> USD - Chainlink (Market Price)</td></tr><tr><td>55</td><td>GM: AAVE-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>56</td><td>GM: DOGE-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>57</td><td>GM: GMX-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>58</td><td>GM: SOL-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>59</td><td>GM: wstETH-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>60</td><td>PT-eETH</td><td>PT-eETH -> eETH - Pendle TWAP<br>eETH -> weETH - Chainlink (Exchange Rate)<br>weETH -> ETH - Chainlink (Market Price)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>61</td><td>PT-rsETH</td><td>PT-rsETH -> ETH - Pendle TWAP (No rsETH market price)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>62</td><td>uniBTC</td><td>uniBTC -> BTC - Chainlink (Exchange Rate)<br>BTC -> USD - Chainlink (Market Price)</td></tr><tr><td>63</td><td>GM: GMX</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>64</td><td>GM: PENDLE-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>65</td><td>GM: PEPE-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>66</td><td>GM: WIF-USD</td><td>Algorithmic + Chainlink (Market Price)</td></tr><tr><td>67</td><td>GLV-BTC</td><td>Chainlink (Market Price)</td></tr><tr><td>68</td><td>GLV-ETH</td><td>Chainlink (Market Price)</td></tr><tr><td>69</td><td>tBTC</td><td>Chainlink (Market Price)</td></tr><tr><td>70</td><td>eUSD</td><td>Redstone (Market Price)</td></tr><tr><td>71</td><td>ETH+</td><td>Redstone (Market Price)</td></tr><tr><td>72</td><td>AAVE</td><td>Chainlink (Market Price)</td></tr><tr><td>73</td><td>USDS</td><td>Chainlink (Market Price)</td></tr><tr><td>74</td><td>sUSDS</td><td>sUSDS -> USDS - Chainlink (Exchange Rate)<br>USDS -> USD - Chainlink (Market Price)</td></tr><tr><td>75</td><td>savUSD</td><td>USDC -> USD - Chainlink (Market Price)</td></tr></tbody></table>

### Berachain

<table><thead><tr><th width="128">Market ID</th><th width="154">Asset</th><th>Oracle Type</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td>Redstone (Market Price)</td></tr><tr><td>1</td><td>WBERA</td><td>Chronicle (Market Price)</td></tr><tr><td>2</td><td>USDC</td><td>Chronicle (Market Price)</td></tr><tr><td>3</td><td>HONEY</td><td>Chronicle (Market Price)</td></tr><tr><td>4</td><td>WBTC</td><td>Chronicle (Market Price)</td></tr><tr><td>5</td><td>USDT</td><td>Chronicle (Market Price)</td></tr><tr><td>6</td><td>LBTC</td><td>LBTC -> BTC - Redstone (Market Price)<br>BTC -> USD - Redstone (Market Price)</td></tr><tr><td>7</td><td>rswETH</td><td>rswETH -> ETH - Redstone (Market Price)<br>ETH -> USD - Redstone (Market Price)</td></tr><tr><td>8</td><td>rUSD</td><td>Chronicle (Exchange Rate)</td></tr><tr><td>9</td><td>SBTC</td><td>Chronicle (Market Price)</td></tr><tr><td>10</td><td>sUSDe</td><td>sUSDe -> USDe - Redstone (Exchange Rate)<br>USDe -> USD - Redstone (Market Price)</td></tr><tr><td>11</td><td>stBTC</td><td>stBTC -> BTC - Redstone (Exchange Rate)<br>BTC -> USD - Redstone (Market Price)</td></tr><tr><td>12</td><td>STONE</td><td>Chronicle (Market Price)</td></tr><tr><td>13</td><td>uniBTC</td><td>uniBTC -> WBTC - Chronicle (Market Price)<br>WBTC -> USD - Chronicle (Market Price)</td></tr><tr><td>14</td><td>USDe</td><td>Redstone (Market Price)</td></tr><tr><td><del>15</del></td><td><del>ylBTCLST</del></td><td><del>ylBTCLST -> FBTC - Chronicle (Market Price)</del><br><del>FBTC -> USD - Chronicle (Market Price)</del></td></tr><tr><td><del>16</del></td><td><del>ylpumpBTC</del></td><td><del>ylpumpBTC -> pumpBTC - Chronicle (Market Price)</del><br><del>pumpBTC -> USD - Chronicle (Market Price)</del></td></tr><tr><td><del>17</del></td><td><del>ylstETH</del></td><td><del>ylstETH -> ETH - Chronicle (Market Price)</del><br><del>ETH -> USD - Chronicle (Market Price)</del></td></tr><tr><td>18</td><td>beraETH</td><td>beraETH -> ETH - Redstone (Exchange Rate)<br>ETH -> USD - Redstone (Market Price)</td></tr><tr><td>19</td><td>NECT</td><td>Chronicle (Market Price)</td></tr><tr><td>20</td><td>pumpBTC.bera</td><td>Chronicle (Market Price)</td></tr><tr><td>21</td><td>rsETH</td><td>rsETH -> ETH - Chronicle (Market Price)<br>ETH -> USD - Chronicle (Market Price)</td></tr><tr><td>22</td><td>sUSDa</td><td>Chronicle (Market Price)</td></tr><tr><td>23</td><td>SolvBTC</td><td>SolvBTC -> BTC - Redstone (Market Price)<br>BTC -> USD - Redstone (Market Price)</td></tr><tr><td>24</td><td>xSolvBTC</td><td>xSolvBTC -> BTC - Redstone (Market Price)<br>BTC -> USD - Redstone (Market Price)</td></tr><tr><td>25</td><td>USDa</td><td>Chronicle (Market Price)</td></tr><tr><td>26</td><td>USD0</td><td>N/A</td></tr><tr><td>27</td><td>USD0++</td><td>N/A</td></tr><tr><td>28</td><td>eBTC</td><td>eBTC -> WBTC - Redstone (Market Price)<br>WBTC -> USD - Redstone (Market Price)</td></tr><tr><td>29</td><td>weETH</td><td>weETH -> ETH - Redstone (Market Price)<br>ETH -> USD - Redstone (Market Price)</td></tr><tr><td>30</td><td>OHM</td><td>Chronicle (Market Price)</td></tr><tr><td>31</td><td>srUSD</td><td>srUSD -> rUSD - Chronicle (Exchange Rate)<br>rUSD -> USD - Chronicle (Exchange Rate)</td></tr><tr><td>32</td><td>HENLO</td><td>HENLO -> BERA - Kodiak (TWAP)<br>BERA -> USD - Chronicle (Market Price)</td></tr><tr><td>33</td><td>iBERA</td><td>iBERA -> BERA - Kodiak (TWAP with floor price of 0.95 iBERA/BERA)<br>BERA -> USD - Chronicle (Market Price)</td></tr><tr><td>34</td><td>iBGT</td><td>iBGT -> BERA - Kodiak (TWAP with floor price of 0.94 iBGT/BERA)<br>BERA -> USD - Chronicle (Market Price)</td></tr><tr><td>35</td><td>DOLO</td><td>DOLO -> BERA - Kodiak TWAP (Market Price)<br>BERA -> USD - Chronicle (Market Price)</td></tr><tr><td>36</td><td>deUSD</td><td>Redstone (Exchange Rate)</td></tr><tr><td>37</td><td>sdeUSD</td><td>Redstone (Exchange Rate)</td></tr><tr><td>38</td><td>siBGT</td><td>siBGT -> BERA - Kodiak (TWAP with floor price of 0.94 iBGT/BERA)<br>BERA -> USD - Chronicle (Market Price)</td></tr><tr><td>39</td><td>pol-rUSD</td><td>drUSD -> rUSD - Dolomite (Interest Index)<br>rUSD -> USD - Chronicle (Exchange Rate)</td></tr><tr><td>40</td><td>BYUSD</td><td>Redstone (Market Price)</td></tr><tr><td>41</td><td>oriBGT</td><td>oriBGT -> iBGT - ERC4626 (Exchange Rate)<br>iBGT -> BERA - Kodiak (TWAP with floor price of 0.94 iBGT/BERA)<br>BERA → USD - Chronicle (Market Price)</td></tr><tr><td>42</td><td>sWBERA</td><td>iBGT -> BERA - ERC4626 (Exchange Rate)<br>BERA → USD - Chronicle (Market Price)</td></tr><tr><td>43</td><td>PT-iBGT (Dec 2025)</td><td>PT-iBGT -> iBGT - Pendle (TWAP)<br>iBGT -> BERA - Kodiak TWAP (TWAP with floor price of 0.94 iBGT/BERA)<br>BERA -> USD - Chronicle (Market Price)</td></tr><tr><td>44</td><td>wgBERA</td><td>Chronicle (Market Price)</td></tr><tr><td>45</td><td>IR</td><td>Redstone (Market Price)</td></tr><tr><td>46</td><td>KDK</td><td>KDK -> USDT - Kodiak (TWAP)<br>USDT -> USD - Chronicle (Market Price)</td></tr><tr><td>47</td><td>savUSD</td><td>USDC -> USD - Chronicle (Market Price)</td></tr></tbody></table>

### Botanix

<table><thead><tr><th width="128.333251953125">Market ID</th><th width="154">Asset</th><th>Oracle Type</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td>Chainlink (Market Price)</td></tr><tr><td>1</td><td>pBTC</td><td>Chainlink (Market Price)</td></tr><tr><td>2</td><td>USDC</td><td>Chainlink (Market Price)</td></tr><tr><td>3</td><td>stBTC</td><td>stBTC -> BTC - Chainlink (Exchange Rate)<br>BTC -> USD - Chainlink (Market Price)</td></tr><tr><td>4</td><td>USDT</td><td>Chainlink (Market Price)</td></tr></tbody></table>

### Ethereum Mainnet

<table><thead><tr><th width="128">Market ID</th><th width="154">Asset</th><th>Oracle Type</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td>Chainlink (Market Price)</td></tr><tr><td>1</td><td>USD1</td><td>Chainlink (Market Price)</td></tr><tr><td>2</td><td>USDC</td><td>Chainlink (Market Price)</td></tr><tr><td>3</td><td>LINK</td><td>Chainlink (Market Price)</td></tr><tr><td>4</td><td>WBTC</td><td>WBTC -> BTC - Chainlink (Exchange Rate)<br>BTC -> USD - Chainlink (Market Price)</td></tr><tr><td>5</td><td>USDT</td><td>Chainlink (Market Price)</td></tr><tr><td>6</td><td>weETH</td><td>weETH -> ETH - Chainlink (Exchange Rate)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>7</td><td>CRV</td><td>Chainlink (Market Price)</td></tr><tr><td>8</td><td>AAVE</td><td>Chainlink (Market Price)</td></tr><tr><td>9</td><td>sUSDe</td><td>Chainlink (Market Price)</td></tr><tr><td>10</td><td>srUSD</td><td>Chronicle (Market Price)</td></tr><tr><td>11</td><td>rUSD</td><td>Chronicle (Market Price)</td></tr><tr><td>12</td><td>mETH</td><td>mETH -> ETH - Chainlink (Market Price)<br>ETH -> USD - Chainlink (Market Price)</td></tr><tr><td>13</td><td>WLFI</td><td>Chainlink (Market Price)</td></tr><tr><td>14</td><td>cUSD</td><td>Redstone (Exchange Rate)</td></tr><tr><td>15</td><td>stcUSD</td><td>stcUSD -> cUSD - ERC4626 (Exchange Rate)<br>cUSD -> USD - Redstone (Exchange Rate)</td></tr><tr><td>16</td><td>DOLO</td><td>DOLO -> USDC - Uniswap V3 TWAP<br>USDC -> USD - Chainlink (Market Price)</td></tr><tr><td>17</td><td>SolvBTC</td><td>SolvBTC-> BTC - Chainlink (Market Price)<br>BTC -> USD - Chainlink (Market Price)</td></tr><tr><td>18</td><td>cbBTC</td><td>Chainlink (Market Price)</td></tr><tr><td>19</td><td>wsrUSD</td><td>Chronicle (Market Price)</td></tr></tbody></table>

### Mantle

<table><thead><tr><th width="128">Market ID</th><th width="154">Asset</th><th>Oracle Type</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td>Chronicle (Market Price)</td></tr><tr><td>1</td><td>WMNT</td><td>Chronicle (Market Price)</td></tr><tr><td>2</td><td>USDC</td><td>Chronicle (Market Price)</td></tr><tr><td>3</td><td>WBTC</td><td>Chronicle (Market Price)</td></tr><tr><td>4</td><td>USDT</td><td>Chronicle (Market Price)</td></tr><tr><td>5</td><td>mETH</td><td>Chronicle (Market Price)</td></tr><tr><td>6</td><td>USDe</td><td>Chronicle (Market Price)</td></tr><tr><td>7</td><td>PT-USDe</td><td>PT-USDe -> USDe - Pendle TWAP <br>USDe -> USD - Chronical (Market Price)</td></tr><tr><td>8</td><td>USDY</td><td>Chronicle (Market Price)</td></tr><tr><td>9</td><td>sMNT</td><td>Chronicle (Market Price)</td></tr><tr><td>10</td><td>PT-USDe</td><td>PT-USDe -> USDe - Pendle TWAP <br>USDe -> USD - Chronical (Market Price)</td></tr><tr><td>11</td><td>PT-mETH</td><td>PT-mETH -> ETH - Pendle TWAP<br>ETH -> USD - Chronicle (Market Price)</td></tr><tr><td>12</td><td>PT-MNT</td><td>PT-MNT -> MNT - Pendle TWAP<br>MNT -> USD - Chronicle (Market Price)</td></tr><tr><td>13</td><td>FBTC</td><td>FBTC -> WBTC - Chronicle (Market Price)<br>WBTC -> USD - Chronicle (Market Price)</td></tr><tr><td>14</td><td>cmETH</td><td>Chronicle (Market Price)</td></tr><tr><td>15</td><td>PT-cmETH</td><td>PT-cmETH -> ETH - Pendle TWAP<br>ETH -> USD - Chronicle (Market Price)</td></tr></tbody></table>

### Polygon zkEVM

<table><thead><tr><th width="128">Market ID</th><th width="154">Asset</th><th>Oracle Type</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td>Chainlink (Market Price)</td></tr><tr><td>1</td><td>DAI</td><td>Chainlink (Market Price)</td></tr><tr><td><del>2</del></td><td><a data-footnote-ref href="#user-content-fn-1"><del>USDC</del></a></td><td><del>Chainlink (Market Price)</del></td></tr><tr><td>3</td><td>LINK</td><td>Chainlink (Market Price)</td></tr><tr><td>4</td><td>WBTC</td><td>Chainlink (Market Price)</td></tr><tr><td>5</td><td>USDT</td><td>Chainlink (Market Price)</td></tr><tr><td>6</td><td>MATIC</td><td>Chainlink (Market Price)</td></tr><tr><td>7</td><td>USDC.E</td><td>Chainlink (Market Price)</td></tr></tbody></table>

### X Layer

<table><thead><tr><th width="128">Market ID</th><th width="154">Asset</th><th>Oracle Type</th></tr></thead><tbody><tr><td>0</td><td>WETH</td><td>Chainlink (Market Price)</td></tr><tr><td>1</td><td>WOKB</td><td>Chainlink (Market Price)</td></tr><tr><td>2</td><td>USDC</td><td>Chainlink (Market Price)</td></tr><tr><td>3</td><td>WBTC</td><td>Chainlink (Market Price)</td></tr><tr><td>4</td><td>USDT</td><td>Chainlink (Market Price)</td></tr></tbody></table>

## Supply Caps

Dolomite is able to institute supply caps for individual assets, which limits the protocol's exposure to debt taken against those assets as well as limits the ability to borrow those same assets. If a supply cap is instituted and the protocol is beyond the limitation, the protocol will be in a wind-down-only mode for that asset. Meaning, all transactions executed against `Dolomite Margin` for that asset needs to size down the market or, at the minimum, leave it unchanged.

{% hint style="info" %}
You can check these numbers by visiting the [Stats Page](https://app.dolomite.io/stats) on Dolomite or by visiting [DolomiteMargin](https://arbiscan.io/address/0x6bd780e7fdf01d77e4d475c821f1e7ae05409072#readContract) on Arbiscan, clicking `Read Contract`, selecting the `getMarketMaxWei` function and plugging in the corresponding `marketId` into the input field.
{% endhint %}

## Minimum Collateralizations (LTVs)

Typical to any money market protocol, Dolomite mandates a global minimum collateralization that all positions must have to be considered healthy. Any position that slips below this threshold is subject to liquidation (more on this [below](#liquidations)).

Some assets have additional collateralization requirements beyond the global minimum. The table below denotes the collateralization requirements for each asset on each network `Dolomite Margin` is deployed.

### Arbitrum One

Minimum collateralization: 115% (86.9565% LTV)

### Berachain

Minimum collateralization: 115% (86.9565% LTV)

### Ethereum

Minimum collateralization: 117.6470588235294117% (85% LTV)

### Botanix

Minimum collateralization: 115% (86.9565% LTV)

### Mantle

Minimum collateralization: 115% (86.9565% LTV)

### Polygon zkEVM

Minimum collateralization: 115% (86.9565% LTV)

### X Layer

Minimum collateralization: 115% (86.9565% LTV)

{% hint style="info" %}
You can check these numbers by visiting the [Stats Page](https://app.dolomite.io/stats) on Dolomite or by visiting [DolomiteMargin](https://arbiscan.io/address/0x6bd780e7fdf01d77e4d475c821f1e7ae05409072#readContract) on Arbiscan, clicking `Read Contract`, selecting the `getMarginRatio` function, adding `1e18` then dividing by `1e18.` Doing so gives you the global minimum collateralization (115%).&#x20;

Then, select the `getMarketMarginPremium` function and plug in the corresponding `marketId` into the input field. With the margin premium, add `1e18`, divide by `1e18`, then multiply the result by 115% (the global minimum collateralization).

For example, the `Margin Premium` for `GLP` is `43478260869565217`. By adding `1e18` and dividing by `1e18` the result is `1.043478260869565217`. When you multiply 115% by `1.043478260869565217`, you get about 120%.
{% endhint %}

## Collateral-Only Mode

Dolomite can put assets into collateral-only mode, to prevent any user from borrowing them. If a market moves from collateral-only mode being `disabled` to `enabled`, then the market will be in a wind-down mode with respect to any out standing borrows. Users that have any debt will not be able to increase the size of our loans and the protocol could enforce liquidations for those users to forcefully pay their debt back. Putting an asset into collateral-only mode could be due to a variety of reasons, like:

* The asset's price oracle is manipulatable to the upside (which increases the surface area for economic attack vectors)
* The asset's price oracle offers a quote that is lower-than-normal, like the price oracle for `GLP`
* Economically speaking, Dolomite or an integrating protocol doesn't want to encourage the borrowing of certain assets

The table below denotes the borrowing status of each asset on each network `Dolomite Margin` is deployed.

{% hint style="info" %}
You can check these numbers by visiting the [Stats Page](https://app.dolomite.io/stats) on Dolomite or by visiting [DolomiteMargin](https://arbiscan.io/address/0x6bd780e7fdf01d77e4d475c821f1e7ae05409072#readContract) on Arbiscan, clicking `Read Contract`, selecting the `getMarketIsClosing` function and plugging in the corresponding `marketId` into the input field.
{% endhint %}

## Account Risk Override

Dolomite's account risk override system enables for increased LTVs for correlated assets, limited LTVs for riskier assets, and modified asset compositions for riskier assets.

### Borrow-Only Mode

{% hint style="warning" %}
This feature is not available on Arbitrum
{% endhint %}

When an asset is designated as "Borrow Only," it can only be used as debt in a borrow position. Users may still deposit the asset to earn interest, but it cannot serve as collateral for borrowing.

Certain assets carry an elevated risk of significant price declines. Allowing such assets as collateral could expose Dolomite to bad debt if their value crashes. By restricting these assets to "Borrow Only," Dolomite can list them safely without risking insolvency due to price volatility.

### Single Collateral With Strict Debt

{% hint style="warning" %}
This feature is not available on Arbitrum as described below. On Arbitrum, it is available for Isolation Mode assets only
{% endhint %}

When an asset is set to "Single Collateral With Strict Debt," it becomes the exclusive collateral option in a borrow position, and only designated assets can be borrowed against it. No other collateral assets can be used in the position.

For example, if Dolomite designates `ETH` as "Single Collateral With Strict Debt" and restricts borrowing to `USDC`, a user depositing `ETH` can only borrow `USDC` in that position with a specific LTV. Attempts to borrow any other asset will be rejected. Attempts to add other collateral assets to the position will be rejected.

There can be several sub-groups for assets with the "Strict Debt" setting enabled. For example, `ETH` could restrict borrowing to either group of stables or  `BTC` against it. Borrowing `BTC` would be in a separate sub-group from stables and would have different LTV requirements. Attempts to borrow stables and `BTC` against `ETH`  in the same position would fail, because `BTC` and stables are in separate sub-groups for allowable debt.

### Automatic E-Mode

{% hint style="warning" %}
This feature is not available on Arbitrum
{% endhint %}

Assets with high correlation—such as stablecoins—can be grouped into risk categories. Dolomite assigns each category a tailored margin requirement, which is automatically applied to a user’s borrow position based on the assets involved. For instance:

* If a user supplies USDC as collateral and borrows USDT, the stablecoin category margin ratio is applied.
* If the same user borrows ETH within that position, the margin ratio automatically adjusts to the default (non-category-specific) ratio.

## Isolation Mode

Isolation Mode is an extremely expressive mechanism for limiting or expanding the functionality of certain assets in `Dolomite Margin`. Using `Isolation Mode` allows Dolomite to dictate which assets can be borrowed against a specific collateral asset, which collateral assets can be used in a position with the `Isolation Mode` asset, and allow native interactions with the underlying tokens for things like on-chain voting, capturing rewards, or other actions that are specific to the asset.

Once an asset is deployed with `Isolation Mode` enabled, it can never be disabled. However the settings for `Isolation Mode` can be tweaked over time if the implementation (per asset) allows for it, liquidity constraints change, or other factors that are outside of Dolomite's control.

{% hint style="info" %}
`Isolation Mode` assets are deployed as wrapped contracts around the listed asset. So the contract address you see on block explorers may appear different. Typically, these assets will be listed with a lowercase `d` in the `symbol` and the `name` will be prefixed with `Dolomite Isolation:`. Meaning, for plvGLP, the technical `name` on-chain is `Dolomite Isolation: Plutus Vault GLP` and the `symbol` is `dplvGLP`.
{% endhint %}

{% hint style="warning" %}
When you make your first deposit of an `Isolation Mode` asset into Dolomite, the token approval will be set on your vault address. The vault smart contract isn't created until the deposit occurs, so it may look like an externally-owned account (EOA), but it's not. Dolomite uses [`Create2`](https://eips.ethereum.org/EIPS/eip-1014) for the creation of the vaults, so your vault address is known before the deposit is executed and the vault is created.
{% endhint %}

Notably, if you open a borrow position with an `Isolation Mode` asset, it can never contain another asset in the position that is in `Isolation Mode`. The differences amongst different `Isolation Mode` levels can be seen in the table below.

<table><thead><tr><th width="111">Level</th><th>Description</th></tr></thead><tbody><tr><td>1</td><td>Can contain any debt or collateral asset in the same position, as long as those assets are not in isolation mode. Since this is the default level for all isolation mode assets, we don't list them in the table below.</td></tr><tr><td>2</td><td>Can contain only specific collateral assets or specific debt assets in the same position. Cannot contain assets in the same position that are in isolation mode.</td></tr><tr><td>3</td><td>Cannot contain any other collateral asset in the same position. Can only contain specific debt assets in the same position. Cannot contain assets in the same position that are in isolation mode.</td></tr></tbody></table>

The table below denotes the isolation mode status of each asset on each network `Dolomite Margin` is deployed.

#### Arbitrum One

<table><thead><tr><th width="130.33333333333331">Market ID</th><th width="183">Symbol</th><th>Isolation Mode Level</th></tr></thead><tbody><tr><td>10</td><td>jUSDC</td><td>3 (can only have <code>USDC</code> and <code>USDC.e</code> as debt; no other collateral assets are allowed)</td></tr><tr><td>16</td><td>YT-GLP (Mar 2024)</td><td>2 (can only have <code>ETH</code>, <code>DAI</code>, <code>USDC</code>, <code>USDT</code>, <code>WBTC</code>, and <code>MIM</code> debt)</td></tr><tr><td>31</td><td>GM: ARB-USD</td><td>2 (can only have <code>ARB</code>, <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>32</td><td>GM: BTC-USD</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>33</td><td>GM: ETH-USD</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>34</td><td>GM: LINK-USD</td><td>2 (can only have <code>LINK</code>, <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>43</td><td>jUSDC V2</td><td>3 (can only have <code>USDC</code> and <code>USDC.e</code> as debt / collateral)</td></tr><tr><td>44</td><td>GM: BTC</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>45</td><td>GM: ETH</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>47</td><td>GM: UNI-USD</td><td>2 (can only have <code>UNI</code>, <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>55</td><td>GM: AAVE-USD</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>56</td><td>GM: DOGE-USD</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>57</td><td>GM: GMX-USD</td><td>2 (can only have <code>GMX</code>, <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>58</td><td>GM: SOL-USD</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>59</td><td>GM: wstETH-USD</td><td>2 (can only have <code>wstETH</code>, <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>63</td><td>GM: GMX</td><td>2 (can only have <code>GMX</code>, <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>64</td><td>GM: PENDLE-USD</td><td>2 (can only have <code>PENDLE</code>, <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>65</td><td>GM: PEPE-USD</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>66</td><td>GM: WIF-USD</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>67</td><td>GLV-BTC</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr><tr><td>68</td><td>GLV-ETH</td><td>2 (can only have <code>ETH</code>, <code>WBTC</code>, and stablecoin debt / collateral)</td></tr></tbody></table>

{% hint style="info" %}
You can check these numbers by visiting the [Stats Page](https://app.dolomite.io/stats) on Dolomite or by visiting [DolomiteMargin](https://arbiscan.io/address/0x6bd780e7fdf01d77e4d475c821f1e7ae05409072#readContract) on Arbiscan, clicking `Read Contract`, selecting the `getMarketTokenAddress` function and plugging in the corresponding `marketId` into the input field. Click on the resulting address and on the page whose address you are directed to, check that the contract name contains `WrappedTokenUserVaultFactory`.
{% endhint %}

### Assets with Forced Expiration

Dolomite can enforce an expiration timestamp for any positions that are opened with an Isolation Mode asset with this setting toggled. This feature is essential to preserve the health and solvency of markets that have a maturity. For example, Pendle's YT assets decay toward a value of 0 as they approach maturity. Thus, having an expiration ensures all positions with Pendle's YT tokens can be closed before they are liquidated due to their price declining toward 0.

#### Arbitrum One

<table><thead><tr><th width="130.33333333333331">Market ID</th><th width="203">Symbol</th><th>Forcefully Expired?</th></tr></thead><tbody><tr><td>16</td><td>YT-GLP (Mar 2024)</td><td>TRUE; Maximum position duration is the lesser of 4 weeks OR  1 week until maturity (<code>Thu Mar 28 2024 00:00:00 GMT</code>; <code>1711584000</code> unix timestamp)</td></tr></tbody></table>

### Only EOA

Dolomite can whitelist what types of users can interact with certain Isolation Mode assets. There may be use cases for an asset only being accessible to real users (externally-owned-accounts (EOAs), smart contract wallets, or some other category that makes sense).

If this protective mode is enabled, only users that meet the criteria can deposit, withdraw, borrow, or otherwise use that particular asset in Dolomite. The table below denotes which assets are only accessible via an EOA.

#### Arbitrum One

<table><thead><tr><th width="130.33333333333331">Market ID</th><th width="244">Symbol</th><th>Only EOA?</th></tr></thead><tbody><tr><td>10</td><td>jUSDC</td><td>TRUE</td></tr><tr><td>43</td><td>jUSDC V2</td><td>TRUE</td></tr></tbody></table>

### Pause Sentinel

Dolomite offers a unique `Pause Sentinel` to reduce contamination risk between assets if there's an issue with a particular listed asset on Dolomite. If external redemptions are ever made unavailable, are paused, etc. Dolomite can dynamically disable borrowing, disable increasing position size, or more for, but *only* for the paused asset and its respective positions.

This breakthrough enables Dolomite to isolate technical risk and potential black swans between external integrations to reduce spillover between collateral assets on Dolomite. Let's walk through an example:

Suppose you have a position open with `jUSDC` borrowing `USDC` as debt. If Jones DAO activates their *Emergency Pause* functionality, users of `jUSDC` would be unable to redeem for `USDC`. This would put massive strain on Dolomite while the situation resolves, resulting in users ramping up their `USDC` debt as a way to "exit" their `jUSDC` position while Jones DAO's system is paused. Dolomite's `Pause Sentinel` is able to disable increasing debt involving `jUSDC` and automatically moves the `jUSDC` market into downsize only mode - enforcing users can only pay back loans. Meanwhile, a user taking out a loan against `GLP` collateral is unaffected by the `jUSDC` market being paused!

The table below denotes which assets have the Pause Sentinel active:

#### Arbitrum One

<table><thead><tr><th width="130.33333333333331">Market ID</th><th width="205">Symbol</th><th>Pause Sentinel Trigger</th></tr></thead><tbody><tr><td>9</td><td>plvGLP</td><td>If the <code>vaultParams()</code> disable redemptions</td></tr><tr><td>10</td><td>jUSDC</td><td>If the <code>JonesUSDCIsolationModeUnwrapperTrader</code> is unable to bypass the 24hr withdrawal period or is not whitelisted. If the <a href="https://arbiscan.io/address/0x2F43c6475f1ecBD051cE486A9f3Ccc4b03F3d713">JonesGlpVaultRouter</a> toggles the <code>isPaused</code> state.</td></tr><tr><td>11</td><td>PT-GLP (Mar 2024)</td><td>If the <a href="https://arbiscan.io/address/0x2066a650AF4b6895f72E618587Aad5e8120B7790">SY GLP</a> token is <code>paused</code></td></tr><tr><td>16</td><td>YT-GLP (Mar 2024)</td><td>If the <a href="https://arbiscan.io/address/0x2066a650AF4b6895f72E618587Aad5e8120B7790">SY GLP</a> token is <code>paused</code></td></tr><tr><td>22</td><td>PT-rETH (Jun 2025)</td><td>If the <a href="https://arbiscan.io/token/0xc0Cf4b266bE5B3229C49590B59E67A09c15b22f4">SY rETH</a> token is <code>paused</code></td></tr><tr><td>23</td><td>PT-wstETH (Jun 2024)</td><td>If the <a href="https://arbiscan.io/token/0x80c12d5b6cc494632bf11b03f09436c8b61cc5df">SY wstETH</a> token is <code>paused</code></td></tr><tr><td>24</td><td>PT-wstETH (Jun 2025)</td><td>If the <a href="https://arbiscan.io/token/0x80c12d5b6cc494632bf11b03f09436c8b61cc5df">SY wstETH</a> token is <code>paused</code></td></tr><tr><td>31</td><td>GM: ARB-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>32</td><td>GM: BTC-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>33</td><td>GM: ETH-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>34</td><td>GM: LINK-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>36</td><td>PT-eETH (Apr 2024)</td><td>If the <a href="https://arbiscan.io/token/0xa6c895eb332e91c5b3d00b7baeeaae478cc502da">SY eETH</a> token is <code>paused</code></td></tr><tr><td>38</td><td>PT-ezETH (Jun 2024)</td><td>If the <a href="https://arbiscan.io/token/0x0de802e3d6cc9145a150bbdc8da9f988a98c5202">SY ezETH</a> token is <code>paused</code></td></tr><tr><td>41</td><td>PT-GLP (Sep 2024)</td><td>If the <a href="https://arbiscan.io/token/0xd1f7d5fec6eb532847e552269c905ac489992ef6">SY GLP</a> token is <code>paused</code></td></tr><tr><td>42</td><td>PT-eETH (Jun 2024)</td><td>If the <a href="https://arbiscan.io/token/0xa6c895eb332e91c5b3d00b7baeeaae478cc502da">SY eETH</a> token is <code>paused</code></td></tr><tr><td>43</td><td>jUSDC V2</td><td>If the <code>JonesUSDCIsolationModeUnwrapperTrader</code> is unable to bypass the 24hr withdrawal period or is not whitelisted. If the <a href="https://arbiscan.io/address/0x2F43c6475f1ecBD051cE486A9f3Ccc4b03F3d713">JonesGlpVaultRouter</a> toggles the <code>isPaused</code> state.</td></tr><tr><td>44</td><td>GM: BTC</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>45</td><td>GM: ETH</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>47</td><td>GM: UNI-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>55</td><td>GM: AAVE-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>56</td><td>GM: DOGE-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>57</td><td>GM: GMX-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>58</td><td>GM: SOL-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>59</td><td>GM: wstETH-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>63</td><td>GM: GMX</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>64</td><td>GM: PENDLE-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>65</td><td>GM: PEPE-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>66</td><td>GM: WIF-USD</td><td>If the market is disabled, if withdrawals are disabled, if the P&#x26;L factor for the pool is too large, or if the callback gas limit is too small</td></tr><tr><td>67</td><td>GLV-BTC</td><td>If the market is disabled, if withdrawals are disabled for the largest underlying GM market, if the P&#x26;L factor for the underlying GM market is too large, or if the callback gas limit is too small</td></tr><tr><td>68</td><td>GLV-ETH</td><td>If the market is disabled, if withdrawals are disabled for the largest underlying GM market, if the P&#x26;L factor for the underlying GM market is too large, or if the callback gas limit is too small</td></tr></tbody></table>

## Liquidations

Liquidations occur when account's collateralization falls below the minimum threshold for the debt asset(s) they owe. The liquidation threshold is defined as:

```
liquidation_threshold = total_usd_value_supplied / (total_usd_value_borrowed * 115%)
```

When a liquidator force-closes an underwater position, the underwater account incurs a liquidation penalty (more on this below). The amount of assets seized by a liquidator upon liquidation is defined as:

<pre><code><strong>amount_seized = 
</strong>    debt_amount * debt_price_usd / collateral_price_usd * (1 + liquidation_penalty)
</code></pre>

Expirations occur when a position's expiry has passed, and the position is subject to being liquidated. Mechanically, expirations work similar to liquidations; having a position force-closed due to expiration follows the same formula above, when the position's collateral asset(s) are seized:

<pre><code><strong>amount_seized = 
</strong><strong>    debt_amount * debt_price_usd / collateral_price_usd * (1 + liquidation_penalty)
</strong></code></pre>

### Health Factor

On the [Borrow](/guide/borrow) page, you'll see something called a `Health Factor` attached to each position. The position's health is represented as a ratio of how close your equity to debt ratio is to reaching 115% collateralization (or higher if the asset has a risk premium applied). When your `Health Factor` falls below `1.00` your position is subject to being force-closed via liquidation.

Here's an example of the calculation assuming the liquidation threshold is 115% collateralization, you have $120 worth of assets and your debt is $100:

```
$120 / ($100 * 1.15) = ~1.043 Health Factor
Liquidation Threshold - when collateral assets < $115 OR debt assets > $104.35
```

<figure><img src="/files/tFOzq6DwqGaNNp4o1p98" alt=""><figcaption><p>Three positions with different &#x26; independent health factors</p></figcaption></figure>

#### Why use the concept of a Health Factor instead of showing liquidation prices?

Dolomite uses the concept of a `Health Factor` because it normalizes different liquidation thresholds that could be different across the diverse set of potential assets in your position. For example, if you're supplying `GLP` and `USDC` as well as borrowing `LINK` and `ETH`, each of those assets could have different liquidation thresholds, which cannot be represented through a simple liquidation price.

### Partial Liquidations

If your health factor is greater than or equal to `0.95` and your collateral is a market that is eligible for partial liquidations, 50% of your debt will be liquidated instead of 100%. The rest of the position will remain open.

As of March 2026, `GM` (Arbitrum GMX V2 vault tokens), `GLV` (Arbitrum GMX V2 vault tokens), and `pol` (Berachain POL tokens) tokens are the only assets that are not eligible for partial liquidations. These assets not being supported is reflective of technical restrictions that makes it safer for the protocol to keep partial liquidations disabled for these assets.

### Liquidation Penalties

Liquidation penalties serve as a deterrent for borrowers to try to not get liquidated and an incentive for liquidators to perform their role and maintain the solvency of Dolomite's money market system. `DolomiteMargin` specifies a global liquidation penalty that is the minimum value that can be set for each market. Each market can add a `Liquidation Spread Premium`, which is used to increase the liquidation penalty. Generally, illiquid and riskier markets have higher liquidation penalties than less risky and more liquid ones. In a way, the penalty is a reflection of the risk the protocol takes on by listing the asset in the system for usage.&#x20;

{% hint style="warning" %}
`Liquidation Spread Premiums` aggregate to reflect the compounded risk of borrowing a risky asset with a risky collateral asset. Using the example of `WBTC` and `LINK` on Arbitrum One, which both have `Liquidation Spread Premiums` of 40%, the liquidation penalty when you borrow one using the other asset collateral is 9.8% (`1.4 * 1.4 * 5%`).

To check the math of this, you can visit [DolomiteMargin](https://arbiscan.io/address/0x6bd780e7fdf01d77e4d475c821f1e7ae05409072#readContract) on Arbiscan, click `Read Contract`, select the `getLiquidationSpreadForPair` function and input 3 and 4 as the `heldMarketId` and `owedMarketId.` Doing so gives you the liquidation penalty of 9.8% if you divide the result by `1e18`.&#x20;
{% endhint %}

#### Dolomite Liquidator Fee

In order to protect the protocol in the case of abnormal market conditions, a percentage of all liquidation penalties will be automatically sent to the treasury. The exact percentage is settable by governance and subject to change.

#### Arbitrum One

Global liquidation penalty: 5%

#### Berachain

Global liquidation penalty: 5%

#### Mantle

Global liquidation penalty: 5%

#### Polygon zkEVM

Global liquidation penalty: 5%

#### X Layer

Global liquidation penalty: 5%

{% hint style="info" %}
You can check these numbers by visiting the [Stats Page](https://app.dolomite.io/stats) on Dolomite or by visiting [DolomiteMargin](https://arbiscan.io/address/0x6bd780e7fdf01d77e4d475c821f1e7ae05409072#readContract) on Arbiscan, clicking `Read Contract`, selecting the `getLiquidationSpread` function and dividing by `1e18.` Doing so gives you the global liquidation penalty of 5%.&#x20;

Then, select the `getMarketSpreadPremium` function and plug in the corresponding `marketId` into the input field. With the spread premium, add `1e18`, divide by `1e18`, then multiply the result by 5% (the global liquidation penalty).

For example, the `Liquidation Penalty` for `WBTC` is `400000000000000000`. By adding `1e18` and dividing by `1e18` the result is `1.400000000000000000`. When you multiply 5% by `1.400000000000000000`, you get 7%.
{% endhint %}

### Liquidation Fee Rake

As of March 2026, all non-isolation mode liquidations are subject to a fee rake that builds up a safety buffer for the protocol to cover any future bad debt events. This feature can be thought of as (smart value recapture) "SVR" that was recently introduced by new oracle implementations by Chainlink. Rather, Dolomite has this capability built into the protocol directly.

At launch, the fee rake is set to 10% of the liquidation penalty on all networks. To query the live fee, go to the LiquidatorProxyV6 contract (`0x8564F36E53AC4f16A2C0B8449cf98d51C3438efD`) on the network you want to inspect, go to `Read as Proxy`, click `dolomiteRake` and divide the result by `1e18` .

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

## Vaporizations

Vaporizations can occur after a liquidation if an underwater account is left with 0 collateral assets but still holds a non-zero amount of debt. Vaporizing an account from a liquidator account will essentially "donate" the liquidators assets to cover any shortfall in bad debt the underwater account accrued.

[^1]: This market is deprecated


# Smart Contract Addresses

Dolomite's smart contracts are deployed to various decentralized networks.

Dolomite's smart contract deployments are segregated by Core Immutable, Core Proxy, and various Modules to keep everything organized and properly delineate the functionality of each contract.

All of Dolomite's smart contracts are open sourced in the following GitHub repositories,

* [Core (immutable) Repository](https://github.com/dolomite-exchange/dolomite-margin)
* [Module (mutable) Repository](https://github.com/dolomite-exchange/dolomite-margin-modules)

and their live deployed addresses can be seen in this section's subpages.


# Core - Immutable

Dolomite's Core repository makes up the immutable layer of Dolomite Margin as well as a few important proxy contracts

## Dolomite Margin - Core

[![GitHub](https://img.shields.io/badge/GitHub-dolomite--exchange%2Fdolomite--margin-lightgrey)](https://github.com/dolomite-exchange/dolomite-margin)

The `Core` contracts are officially deployed to the following networks:

### **Arbitrum One**

<table><thead><tr><th width="256.3333333333333">Contract Name</th><th>Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/DolomiteMargin.sol">DolomiteMargin</a></td><td>Main margin contract</td><td><a href="https://arbiscan.io/address/0x6Bd780E7fDf01D77e4d475c821f1e7AE05409072">0x6Bd780E7fDf01D77e4d475c821f1e7AE05409072</a></td></tr></tbody></table>

### **Base**

<table><thead><tr><th width="256.3333333333333">Contract Name</th><th width="245">Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/protocol/DolomiteMargin.sol">DolomiteMargin</a></td><td>Main margin contract</td><td><a href="https://basescan.org/address/0x003ca23fd5f0ca87d01f6ec6cd14a8ae60c2b97d">0x003Ca23Fd5F0ca87D01F6eC6CD14A8AE60c2b97D</a></td></tr></tbody></table>

### **Berachain**

<table><thead><tr><th width="256.3333333333333">Contract Name</th><th>Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/protocol/DolomiteMargin.sol">DolomiteMargin</a></td><td>Main margin contract</td><td><a href="https://berascan.com/address/0x003Ca23Fd5F0ca87D01F6eC6CD14A8AE60c2b97D">0x003Ca23Fd5F0ca87D01F6eC6CD14A8AE60c2b97D</a></td></tr></tbody></table>

### **Botanix**

<table><thead><tr><th width="256.3333333333333">Contract Name</th><th>Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/protocol/DolomiteMargin.sol">DolomiteMargin</a></td><td>Main margin contract</td><td><a href="https://botanixscan.io/address/0x003Ca23Fd5F0ca87D01F6eC6CD14A8AE60c2b97D">0x003Ca23Fd5F0ca87D01F6eC6CD14A8AE60c2b97D</a></td></tr></tbody></table>

### Ethereum Mainnet

<table><thead><tr><th width="256.3333333333333">Contract Name</th><th width="245">Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/protocol/DolomiteMargin.sol">DolomiteMargin</a></td><td>Main margin contract</td><td><a href="https://etherscan.io/address/0x003ca23fd5f0ca87d01f6ec6cd14a8ae60c2b97d">0x003Ca23Fd5F0ca87D01F6eC6CD14A8AE60c2b97D</a></td></tr></tbody></table>

### Ink

<table><thead><tr><th width="256.3333333333333">Contract Name</th><th width="245">Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/protocol/DolomiteMargin.sol">DolomiteMargin</a></td><td>Main margin contract</td><td><a href="https://explorer.inkonchain.com/address/0x003ca23fd5f0ca87d01f6ec6cd14a8ae60c2b97d">0x003Ca23Fd5F0ca87D01F6eC6CD14A8AE60c2b97D</a></td></tr></tbody></table>

### Mantle

<table><thead><tr><th width="256.3333333333333">Contract Name</th><th width="245">Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/protocol/DolomiteMargin.sol">DolomiteMargin</a></td><td>Main margin contract</td><td><a href="https://mantlescan.xyz/address/0xE6Ef4f0B2455bAB92ce7cC78E35324ab58917De8">0xE6Ef4f0B2455bAB92ce7cC78E35324ab58917De8</a></td></tr></tbody></table>

### Polygon zkEVM

<table><thead><tr><th width="256.3333333333333">Contract Name</th><th width="245">Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/protocol/DolomiteMargin.sol">DolomiteMargin</a></td><td>Main margin contract</td><td><a href="https://zkevm.polygonscan.com/address/0x836b557Cf9eF29fcF49C776841191782df34e4e5">0x836b557Cf9eF29fcF49C776841191782df34e4e5</a></td></tr></tbody></table>

### Super Seed

<table><thead><tr><th width="256.3333333333333">Contract Name</th><th width="245">Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/protocol/DolomiteMargin.sol">DolomiteMargin</a></td><td>Main margin contract</td><td><a href="https://explorer.superseed.xyz/address/0x003Ca23Fd5F0ca87D01F6eC6CD14A8AE60c2b97D">0x003Ca23Fd5F0ca87D01F6eC6CD14A8AE60c2b97D</a></td></tr></tbody></table>

### X Layer

<table><thead><tr><th width="256.3333333333333">Contract Name</th><th width="245">Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/protocol/DolomiteMargin.sol">DolomiteMargin</a></td><td>Main margin contract</td><td><a href="https://www.oklink.com/xlayer/address/0x836b557Cf9eF29fcF49C776841191782df34e4e5">0x836b557Cf9eF29fcF49C776841191782df34e4e5</a></td></tr></tbody></table>


# Core - Proxies

Dolomite's Core repository makes up the immutable layer of Dolomite Margin as well as a few important router and proxy contracts

## Dolomite Margin - Core

[![GitHub](https://img.shields.io/badge/GitHub-dolomite--exchange%2Fdolomite--margin-lightgrey)](https://github.com/dolomite-exchange/dolomite-margin)

The `Core` proxy contracts are officially deployed to the following networks (and can be modified via call to Dolomite Margin from the owner):

### **Arbitrum One**

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/proxies/BorrowPositionProxyV1.sol">BorrowPositionProxyV1</a></td><td><a href="https://arbiscan.io/address/0xe43638797513ef7A6d326a95E8647d86d2f5a099">0xe43638797513ef7A6d326a95E8647d86d2f5a099</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/proxies/BorrowPositionProxyV2.sol">BorrowPositionProxyV2</a></td><td><a href="https://arbiscan.io/address/0x38E49A617305101216eC6306e3a18065D14Bf3a7">0x38E49A617305101216eC6306e3a18065D14Bf3a7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/proxies/DepositWithdrawalProxy.sol">DepositWithdrawalProxy</a></td><td><a href="https://arbiscan.io/address/0xAdB9D68c613df4AA363B42161E1282117C7B9594">0xAdB9D68c613df4AA363B42161E1282117C7B9594</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/EventEmitterRegistry.sol">EventEmitterRegistryProxy</a></td><td><a href="https://arbiscan.io/address/0x4BfF12773B0Dc3Cb35f174B5CD351F662018CC2F">0x4BfF12773B0Dc3Cb35f174B5CD351F662018CC2F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/traders/Expiry.sol">ExpiryTrader</a></td><td><a href="https://arbiscan.io/address/0xDEc1ae3b570ac3c57871BBD7bFeacC807f973Bea">0xDEc1ae3b570ac3c57871BBD7bFeacC807f973Bea</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/proxies/ExpiryProxy.sol">ExpiryProxy</a></td><td><a href="https://arbiscan.io/address/0x40899E265A7899968f0f153410321B9175730B00">0x40899E265A7899968f0f153410321B9175730B00</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/proxies/GenericTraderProxyV1.sol">GenericTraderProxyV1</a></td><td><a href="https://arbiscan.io/address/0x905F3adD52F01A9069218c8D1c11E240afF61D2B">0x905F3adD52F01A9069218c8D1c11E240afF61D2B</a></td></tr><tr><td><a href="https://app.safe.global/home?safe=arb1:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">GnosisSafe</a></td><td><a href="https://arbiscan.io/address/0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/proxies/LiquidatorAssetRegistry.sol">LiquidatorAssetRegistry</a></td><td><a href="https://arbiscan.io/address/0x10d98759762efac656bd4be7f2f5599208f44fac">0x10d98759762EFaC656BD4bE7F2f5599208F44FAc</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/proxies/LiquidatorProxyV1.sol">LiquidatorProxyV1</a></td><td><a href="https://arbiscan.io/address/0x8c6e337da1bd534548c5a9b6ac3d9e4d15fa715a">0x8c6e337dA1bD534548c5A9b6aC3d9e4D15Fa715A</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol">LiquidatorProxyV4WithGenericTrader</a></td><td><a href="https://arbiscan.io/address/0x34975624E992bF5c094EF0CF3344660f7AaB9CB3">0x34975624E992bF5c094EF0CF3344660f7AaB9CB3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/proxies/LiquidatorProxyV5.sol">LiquidatorProxyV5</a></td><td><a href="https://arbiscan.io/address/0x1506f80d2FD5fbeF2424573EC86E5481C972B99a">0x1506f80d2FD5fbeF2424573EC86E5481C972B99a</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/utils/MultiCall.sol">ArbitrumMultiCall</a></td><td><a href="https://arbiscan.io/address/0xB18B8B1A5BDEa1f3c9776715b9325F932803FB1f">0xB18B8B1A5BDEa1f3c9776715b9325F932803FB1f</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/multisig/PartiallyDelayedMultiSig.sol">PartiallyDelayedMultiSig</a></td><td><a href="https://arbiscan.io/address/0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9">0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/proxies/TransferProxy.sol">TransferProxy</a></td><td><a href="https://arbiscan.io/address/0xe04f884e8BB9868b6013dEAd84ad5A3B8cb1Df5A">0xe04f884e8BB9868b6013dEAd84ad5A3B8cb1Df5A</a></td></tr></tbody></table>

### **Base**

<table><thead><tr><th width="328.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV1.sol">BorrowPositionProxyV1</a></td><td><a href="https://basescan.org/address/0x67567Fce98A44745820069C37C395426F1C30ba6">0x67567Fce98A44745820069C37C395426F1C30ba6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV2.sol">BorrowPositionProxyV2</a></td><td><a href="https://basescan.org/address/0xC06271eb97d960F4034DDF953e16271CcB2B10BD">0xC06271eb97d960F4034DDF953e16271CcB2B10BD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/DepositWithdrawalProxy.sol">DepositWithdrawalProxy</a></td><td><a href="https://basescan.org/address/0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6">0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/EventEmitterRegistry.sol">EventEmitterRegistryProxy</a></td><td><a href="https://basescan.org/address/0x6d40138c99F6D9116F738F44A0E6751A42232486">0x6d40138c99F6D9116F738F44A0E6751A42232486</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/traders/Expiry.sol">ExpiryTrader</a></td><td><a href="https://basescan.org/address/0x2Ae007882b91206942c70ADc833A61Ee531D8D5D">0x2Ae007882b91206942c70ADc833A61Ee531D8D5D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/ExpiryProxy.sol">ExpiryProxy</a></td><td><a href="https://basescan.org/address/0x1B39F7C19d952752F255536e72726a592167e7Bc">0x1B39F7C19d952752F255536e72726a592167e7Bc</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/GenericTraderProxyV1.sol">GenericTraderProxyV1</a></td><td><a href="https://basescan.org/address/0xb50BcDFC914e0AfB484Dee621F49010862Fb928d">0xb50BcDFC914e0AfB484Dee621F49010862Fb928d</a></td></tr><tr><td><a href="https://app.safe.global/home?safe=base:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">GnosisSafe</a></td><td><a href="https://app.safe.global/home?safe=base:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/helpers/LiquidatorAssetRegistry.sol">LiquidatorAssetRegistry</a></td><td><a href="https://basescan.org/address/0xd82100524392c7DBDD7502F136A226c8a4c56CfA">0xd82100524392c7DBDD7502F136A226c8a4c56CfA</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV1.sol">LiquidatorProxyV1</a></td><td><a href="https://basescan.org/address/0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3">0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol">LiquidatorProxyV4WithGenericTrader</a></td><td><a href="https://basescan.org/address/0x2aDeAFd960366411215ce8706C1aFE2853C5487B">0x2aDeAFd960366411215ce8706C1aFE2853C5487B</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/proxies/LiquidatorProxyV5.sol">LiquidatorProxyV5</a></td><td><a href="https://basescan.org/address/0x1506f80d2FD5fbeF2424573EC86E5481C972B99a">0x1506f80d2FD5fbeF2424573EC86E5481C972B99a</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/utils/MultiCall.sol">MultiCall</a></td><td><a href="https://basescan.org/address/0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A">0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/multisig/PartiallyDelayedMultiSig.sol">PartiallyDelayedMultiSig</a></td><td><a href="https://basescan.org/address/0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9">0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/TransferProxy.sol">TransferProxy</a></td><td><a href="https://basescan.org/address/0x07C28e60b28C98E09f5b69C9c473FE19062624f8">0x07C28e60b28C98E09f5b69C9c473FE19062624f8</a></td></tr></tbody></table>

### **Berachain**

<table><thead><tr><th width="328.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV1.sol">BorrowPositionProxyV1</a></td><td><a href="https://berascan.com/address/0x67567Fce98A44745820069C37C395426F1C30ba6">0x67567Fce98A44745820069C37C395426F1C30ba6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV2.sol">BorrowPositionProxyV2</a></td><td><a href="https://berascan.com/address/0xC06271eb97d960F4034DDF953e16271CcB2B10BD">0xC06271eb97d960F4034DDF953e16271CcB2B10BD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/DepositWithdrawalProxy.sol">DepositWithdrawalProxy</a></td><td><a href="https://berascan.com/address/0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6">0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/EventEmitterRegistry.sol">EventEmitterRegistryProxy</a></td><td><a href="https://berascan.com/address/0x6d40138c99F6D9116F738F44A0E6751A42232486">0x6d40138c99F6D9116F738F44A0E6751A42232486</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/traders/Expiry.sol">ExpiryTrader</a></td><td><a href="https://berascan.com/address/0x2Ae007882b91206942c70ADc833A61Ee531D8D5D">0x2Ae007882b91206942c70ADc833A61Ee531D8D5D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/ExpiryProxy.sol">ExpiryProxy</a></td><td><a href="https://berascan.com/address/0x1B39F7C19d952752F255536e72726a592167e7Bc">0x1B39F7C19d952752F255536e72726a592167e7Bc</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/GenericTraderProxyV1.sol">GenericTraderProxyV1</a></td><td><a href="https://berascan.com/address/0xb50BcDFC914e0AfB484Dee621F49010862Fb928d">0xb50BcDFC914e0AfB484Dee621F49010862Fb928d</a></td></tr><tr><td><a href="https://app.safe.global/home?safe=base:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">GnosisSafe</a></td><td><a href="https://berascan.com/address/0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/helpers/LiquidatorAssetRegistry.sol">LiquidatorAssetRegistry</a></td><td><a href="https://berascan.com/address/0xd82100524392c7DBDD7502F136A226c8a4c56CfA">0xd82100524392c7DBDD7502F136A226c8a4c56CfA</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV1.sol">LiquidatorProxyV1</a></td><td><a href="https://berascan.com/address/0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3">0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol">LiquidatorProxyV4WithGenericTrader</a></td><td><a href="https://berascan.com/address/0x2aDeAFd960366411215ce8706C1aFE2853C5487B">0x2aDeAFd960366411215ce8706C1aFE2853C5487B</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/proxies/LiquidatorProxyV5.sol">LiquidatorProxyV5</a></td><td><a href="https://berascan.com/address/0x1506f80d2FD5fbeF2424573EC86E5481C972B99a">0x1506f80d2FD5fbeF2424573EC86E5481C972B99a</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/utils/MultiCall.sol">MultiCall</a></td><td><a href="https://berascan.com/address/0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A">0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/multisig/PartiallyDelayedMultiSig.sol">PartiallyDelayedMultiSig</a></td><td><a href="https://berascan.com/address/0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9">0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/TransferProxy.sol">TransferProxy</a></td><td><a href="https://berascan.com/address/0x07C28e60b28C98E09f5b69C9c473FE19062624f8">0x07C28e60b28C98E09f5b69C9c473FE19062624f8</a></td></tr></tbody></table>

### **Botanix**

<table><thead><tr><th width="328.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV1.sol">BorrowPositionProxyV1</a></td><td><a href="https://botanixscan.io/address/0x67567Fce98A44745820069C37C395426F1C30ba6">0x67567Fce98A44745820069C37C395426F1C30ba6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV2.sol">BorrowPositionProxyV2</a></td><td><a href="https://botanixscan.io/address/0xC06271eb97d960F4034DDF953e16271CcB2B10BD">0xC06271eb97d960F4034DDF953e16271CcB2B10BD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/DepositWithdrawalProxy.sol">DepositWithdrawalProxy</a></td><td><a href="https://botanixscan.io/address/0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6">0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/EventEmitterRegistry.sol">EventEmitterRegistryProxy</a></td><td><a href="https://botanixscan.io/address/0x6d40138c99F6D9116F738F44A0E6751A42232486">0x6d40138c99F6D9116F738F44A0E6751A42232486</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/traders/Expiry.sol">ExpiryTrader</a></td><td><a href="https://botanixscan.io/address/0x2Ae007882b91206942c70ADc833A61Ee531D8D5D">0x2Ae007882b91206942c70ADc833A61Ee531D8D5D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/ExpiryProxy.sol">ExpiryProxy</a></td><td><a href="https://botanixscan.io/address/0x1B39F7C19d952752F255536e72726a592167e7Bc">0x1B39F7C19d952752F255536e72726a592167e7Bc</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/GenericTraderProxyV1.sol">GenericTraderProxyV1</a></td><td><a href="https://botanixscan.io/address/0xb50BcDFC914e0AfB484Dee621F49010862Fb928d">0xb50BcDFC914e0AfB484Dee621F49010862Fb928d</a></td></tr><tr><td><a href="https://app.safe.global/home?safe=base:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">GnosisSafe</a></td><td><a href="https://botanixscan.io/address/0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/helpers/LiquidatorAssetRegistry.sol">LiquidatorAssetRegistry</a></td><td><a href="https://botanixscan.io/address/0xd82100524392c7DBDD7502F136A226c8a4c56CfA">0xd82100524392c7DBDD7502F136A226c8a4c56CfA</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV1.sol">LiquidatorProxyV1</a></td><td><a href="https://botanixscan.io/address/0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3">0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol">LiquidatorProxyV4WithGenericTrader</a></td><td><a href="https://botanixscan.io/address/0x2aDeAFd960366411215ce8706C1aFE2853C5487B">0x2aDeAFd960366411215ce8706C1aFE2853C5487B</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/utils/MultiCall.sol">MultiCall</a></td><td><a href="https://botanixscan.io/address/0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A">0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/multisig/PartiallyDelayedMultiSig.sol">PartiallyDelayedMultiSig</a></td><td><a href="https://botanixscan.io/address/0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9">0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/TransferProxy.sol">TransferProxy</a></td><td><a href="https://botanixscan.io/address/0x07C28e60b28C98E09f5b69C9c473FE19062624f8">0x07C28e60b28C98E09f5b69C9c473FE19062624f8</a></td></tr></tbody></table>

### Ethereum Mainnet

<table><thead><tr><th width="328.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV1.sol">BorrowPositionProxyV1</a></td><td><a href="https://etherscan.io/address/0x67567Fce98A44745820069C37C395426F1C30ba6">0x67567Fce98A44745820069C37C395426F1C30ba6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV2.sol">BorrowPositionProxyV2</a></td><td><a href="https://etherscan.io/address/0xC06271eb97d960F4034DDF953e16271CcB2B10BD">0xC06271eb97d960F4034DDF953e16271CcB2B10BD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/DepositWithdrawalProxy.sol">DepositWithdrawalProxy</a></td><td><a href="https://etherscan.io/address/0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6">0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/EventEmitterRegistry.sol">EventEmitterRegistryProxy</a></td><td><a href="https://etherscan.io/address/0x6d40138c99F6D9116F738F44A0E6751A42232486">0x6d40138c99F6D9116F738F44A0E6751A42232486</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/traders/Expiry.sol">ExpiryTrader</a></td><td><a href="https://etherscan.io/address/0x2Ae007882b91206942c70ADc833A61Ee531D8D5D">0x2Ae007882b91206942c70ADc833A61Ee531D8D5D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/ExpiryProxy.sol">ExpiryProxy</a></td><td><a href="https://etherscan.io/address/0x1B39F7C19d952752F255536e72726a592167e7Bc">0x1B39F7C19d952752F255536e72726a592167e7Bc</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/GenericTraderProxyV1.sol">GenericTraderProxyV1</a></td><td><a href="https://etherscan.io/address/0xb50BcDFC914e0AfB484Dee621F49010862Fb928d">0xb50BcDFC914e0AfB484Dee621F49010862Fb928d</a></td></tr><tr><td><a href="https://app.safe.global/home?safe=base:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">GnosisSafe</a></td><td><a href="https://etherscan.io/address/0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/helpers/LiquidatorAssetRegistry.sol">LiquidatorAssetRegistry</a></td><td><a href="https://etherscan.io/address/0xd82100524392c7DBDD7502F136A226c8a4c56CfA">0xd82100524392c7DBDD7502F136A226c8a4c56CfA</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV1.sol">LiquidatorProxyV1</a></td><td><a href="https://etherscan.io/address/0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3">0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol">LiquidatorProxyV4WithGenericTrader</a></td><td><a href="https://etherscan.io/address/0x2aDeAFd960366411215ce8706C1aFE2853C5487B">0x2aDeAFd960366411215ce8706C1aFE2853C5487B</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/utils/MultiCall.sol">MultiCall</a></td><td><a href="https://etherscan.io/address/0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A">0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/multisig/PartiallyDelayedMultiSig.sol">PartiallyDelayedMultiSig</a></td><td><a href="https://etherscan.io/address/0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9">0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/TransferProxy.sol">TransferProxy</a></td><td><a href="https://etherscan.io/address/0x07C28e60b28C98E09f5b69C9c473FE19062624f8">0x07C28e60b28C98E09f5b69C9c473FE19062624f8</a></td></tr></tbody></table>

### Ink

<table><thead><tr><th width="316.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV1.sol">BorrowPositionProxyV1</a></td><td><a href="https://explorer.inkonchain.com/address/0x67567Fce98A44745820069C37C395426F1C30ba6">0x67567Fce98A44745820069C37C395426F1C30ba6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV2.sol">BorrowPositionProxyV2</a></td><td><a href="https://explorer.inkonchain.com/address/0xC06271eb97d960F4034DDF953e16271CcB2B10BD">0xC06271eb97d960F4034DDF953e16271CcB2B10BD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/DepositWithdrawalProxy.sol">DepositWithdrawalProxy</a></td><td><a href="https://explorer.inkonchain.com/address/0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6">0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/EventEmitterRegistry.sol">EventEmitterRegistryProxy</a></td><td><a href="https://explorer.inkonchain.com/address/0x6d40138c99F6D9116F738F44A0E6751A42232486">0x6d40138c99F6D9116F738F44A0E6751A42232486</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/traders/Expiry.sol">ExpiryTrader</a></td><td><a href="https://explorer.inkonchain.com/address/0x2Ae007882b91206942c70ADc833A61Ee531D8D5D">0x2Ae007882b91206942c70ADc833A61Ee531D8D5D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/ExpiryProxy.sol">ExpiryProxy</a></td><td><a href="https://explorer.inkonchain.com/address/0x1B39F7C19d952752F255536e72726a592167e7Bc">0x1B39F7C19d952752F255536e72726a592167e7Bc</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/GenericTraderProxyV1.sol">GenericTraderProxyV1</a></td><td><a href="https://explorer.inkonchain.com/address/0xb50BcDFC914e0AfB484Dee621F49010862Fb928d">0xb50BcDFC914e0AfB484Dee621F49010862Fb928d</a></td></tr><tr><td><a href="https://app.safe.global/home?safe=base:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">GnosisSafe</a></td><td><a href="https://app.safe.global/home?safe=ink:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/helpers/LiquidatorAssetRegistry.sol">LiquidatorAssetRegistry</a></td><td><a href="https://explorer.inkonchain.com/address/0xd82100524392c7DBDD7502F136A226c8a4c56CfA">0xd82100524392c7DBDD7502F136A226c8a4c56CfA</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV1.sol">LiquidatorProxyV1</a></td><td><a href="https://explorer.inkonchain.com/address/0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3">0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol">LiquidatorProxyV4WithGenericTrader</a></td><td><a href="https://explorer.inkonchain.com/address/0x2aDeAFd960366411215ce8706C1aFE2853C5487B">0x2aDeAFd960366411215ce8706C1aFE2853C5487B</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/proxies/LiquidatorProxyV5.sol">LiquidatorProxyV5</a></td><td><a href="https://explorer.inkonchain.com/address/0x1506f80d2FD5fbeF2424573EC86E5481C972B99a">0x1506f80d2FD5fbeF2424573EC86E5481C972B99a</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/utils/MultiCall.sol">MultiCall</a></td><td><a href="https://explorer.inkonchain.com/address/0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A">0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/multisig/PartiallyDelayedMultiSig.sol">PartiallyDelayedMultiSig</a></td><td><a href="https://explorer.inkonchain.com/address/0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9">0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/TransferProxy.sol">TransferProxy</a></td><td><a href="https://explorer.inkonchain.com/address/0x07C28e60b28C98E09f5b69C9c473FE19062624f8">0x07C28e60b28C98E09f5b69C9c473FE19062624f8</a></td></tr></tbody></table>

### Mantle

<table><thead><tr><th width="329.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV1.sol">BorrowPositionProxyV1</a></td><td><a href="https://mantlescan.xyz/address/0x97a08604a56f16947a4a956eFEc2Ef223364b733">0x97a08604a56f16947a4a956eFEc2Ef223364b733</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV2.sol">BorrowPositionProxyV2</a></td><td><a href="https://mantlescan.xyz/address/0xe99A7e4556CaF7925fbac52765128e524E9Dd793">0xe99A7e4556CaF7925fbac52765128e524E9Dd793</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/DepositWithdrawalProxy.sol">DepositWithdrawalProxy</a></td><td><a href="https://mantlescan.xyz/address/0x1A3752Eb5Db6B2Ac0207Ce3847f18743D3fAccA5">0x1A3752Eb5Db6B2Ac0207Ce3847f18743D3fAccA5</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/EventEmitterRegistry.sol">EventEmitterRegistryProxy</a></td><td><a href="https://mantlescan.xyz/address/0x778CeA4cE43ba1a3eD6306CA692B8d9D3dFB827c">0x778CeA4cE43ba1a3eD6306CA692B8d9D3dFB827c</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/traders/Expiry.sol">ExpiryTrader</a></td><td><a href="https://mantlescan.xyz/address/0x6df6DBF5053c3771217376fb3ef7F1f5d4889a25">0x6df6DBF5053c3771217376fb3ef7F1f5d4889a25</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/ExpiryProxy.sol">ExpiryProxy</a></td><td><a href="https://mantlescan.xyz/address/0x075a0614a64467F852cC3AF3876574aFC5FECc65">0x075a0614a64467F852cC3AF3876574aFC5FECc65</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/GenericTraderProxyV1.sol">GenericTraderProxyV1</a></td><td><a href="https://mantlescan.xyz/address/0xd432C30de38b5d6F30257a353ED853503ed2edab">0xd432C30de38b5d6F30257a353ED853503ed2edab</a></td></tr><tr><td><a href="https://app.safe.global/home?safe=base:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">GnosisSafe</a></td><td><a href="https://app.safe.global/home?safe=mnt:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/helpers/LiquidatorAssetRegistry.sol">LiquidatorAssetRegistry</a></td><td><a href="https://mantlescan.xyz/address/0x7b6D28a0Debb6f4B1c58743AAe3BF149A32d69B5">0x7b6D28a0Debb6f4B1c58743AAe3BF149A32d69B5</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV1.sol">LiquidatorProxyV1</a></td><td><a href="https://mantlescan.xyz/address/0x8e6B0e3Ad57A9637Ab27C1480600d45177073a71">0x8e6B0e3Ad57A9637Ab27C1480600d45177073a71</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol">LiquidatorProxyV4WithGenericTrader</a></td><td><a href="https://mantlescan.xyz/address/0x22dd9f4393a3cc698D6C09AD14B0b9D515084FC7">0x22dd9f4393a3cc698D6C09AD14B0b9D515084FC7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/proxies/LiquidatorProxyV5.sol">LiquidatorProxyV5</a></td><td><a href="https://mantlescan.xyz/address/0x1506f80d2FD5fbeF2424573EC86E5481C972B99a?__cf_chl_rt_tk=DszhXkS.2C6_zpVj6kIbuEyskGQMFRRu6vtzzA_fS0k-1746070296-1.0.1.1-BmuNoyu9EuN0ihV148Rky_cNlcJYiUX4a2Ae3gMDhsU">0x1506f80d2FD5fbeF2424573EC86E5481C972B99a</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/utils/MultiCall.sol">MultiCall</a></td><td><a href="https://mantlescan.xyz/address/0x6978Ffdcd509dED2F8557565e0a9FC5CFA1bEbc5">0x6978Ffdcd509dED2F8557565e0a9FC5CFA1bEbc5</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/multisig/PartiallyDelayedMultiSig.sol">PartiallyDelayedMultiSig</a></td><td><a href="https://mantlescan.xyz/address/0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9">0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/TransferProxy.sol">TransferProxy</a></td><td><a href="https://mantlescan.xyz/address/0x9582378F220c724012c59C376C1910C0549Af66c">0x9582378F220c724012c59C376C1910C0549Af66c</a></td></tr></tbody></table>

### Polygon zkEVM

<table><thead><tr><th width="329.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV1.sol">BorrowPositionProxyV1</a></td><td><a href="https://zkevm.polygonscan.com/address/0xc28A4EC9f09E4071E3707eAACa5c3754fA4f5Faa">0xc28A4EC9f09E4071E3707eAACa5c3754fA4f5Faa</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV2.sol">BorrowPositionProxyV2</a></td><td><a href="https://zkevm.polygonscan.com/address/0xB3fF983d7927540B7f92602657a2a26977664e77">0xB3fF983d7927540B7f92602657a2a26977664e77</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/DepositWithdrawalProxy.sol">DepositWithdrawalProxy</a></td><td><a href="https://zkevm.polygonscan.com/address/0xDfB6BAA334712cBBeb26B7537f62B81C2a87B1E8">0xDfB6BAA334712cBBeb26B7537f62B81C2a87B1E8</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/EventEmitterRegistry.sol">EventEmitterRegistryProxy</a></td><td><a href="https://zkevm.polygonscan.com/address/0x2e9BE819D04CB62bF3816B627c9DfF819136CEc4">0x2e9BE819D04CB62bF3816B627c9DfF819136CEc4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/traders/Expiry.sol">ExpiryTrader</a></td><td><a href="https://zkevm.polygonscan.com/address/0xb3F81b0F53CDEe755c70665923e08a8f0e81d0c3">0xb3F81b0F53CDEe755c70665923e08a8f0e81d0c3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/ExpiryProxy.sol">ExpiryProxy</a></td><td><a href="https://zkevm.polygonscan.com/address/0xb3F81b0F53CDEe755c70665923e08a8f0e81d0c3">0x277118ca98f7A8C26Afeb12928D0A37eDb382D7e</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/GenericTraderProxyV1.sol">GenericTraderProxyV1</a></td><td><a href="https://zkevm.polygonscan.com/address/0x88a6d8E6fFdb145A8719d43E6FD48F3383745866">0x88a6d8E6fFdb145A8719d43E6FD48F3383745866</a></td></tr><tr><td><a href="https://app.safe.global/home?safe=base:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">GnosisSafe</a></td><td><a href="https://app.safe.global/home?safe=zkevm:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/helpers/LiquidatorAssetRegistry.sol">LiquidatorAssetRegistry</a></td><td><a href="https://zkevm.polygonscan.com/address/0xD4480794D7b2bacbcB749462dD5e6f4C555036f3">0xD4480794D7b2bacbcB749462dD5e6f4C555036f3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV1.sol">LiquidatorProxyV1</a></td><td><a href="https://zkevm.polygonscan.com/address/0xf0C0Db8E4e01BD9A8e01860ef83077405a53f781">0xf0C0Db8E4e01BD9A8e01860ef83077405a53f781</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol">LiquidatorProxyV4WithGenericTrader</a></td><td><a href="https://zkevm.polygonscan.com/address/0x227455c3e636B0FCC9D37f3EfA2Cd5AF7a812141">0x227455c3e636B0FCC9D37f3EfA2Cd5AF7a812141</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/proxies/LiquidatorProxyV5.sol">LiquidatorProxyV5</a></td><td><a href="https://zkevm.polygonscan.com/address/0x1506f80d2FD5fbeF2424573EC86E5481C972B99a">0x1506f80d2FD5fbeF2424573EC86E5481C972B99a</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/utils/MultiCall.sol">MultiCall</a></td><td><a href="https://zkevm.polygonscan.com/address/0x4232FCE0D67839F4FD536990bDc02043d9Ab708a">0x4232FCE0D67839F4FD536990bDc02043d9Ab708a</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/multisig/PartiallyDelayedMultiSig.sol">PartiallyDelayedMultiSig</a></td><td><a href="https://zkevm.polygonscan.com/address/0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9">0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/TransferProxy.sol">TransferProxy</a></td><td><a href="https://zkevm.polygonscan.com/address/0xd55AFc5eE5fFdAd3d44829b22E2C2B10a484D33e">0xd55AFc5eE5fFdAd3d44829b22E2C2B10a484D33e</a></td></tr></tbody></table>

### Super Seed

<table><thead><tr><th width="324.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV1.sol">BorrowPositionProxyV1</a></td><td><a href="https://explorer.superseed.xyz/address/0x67567Fce98A44745820069C37C395426F1C30ba6">0x67567Fce98A44745820069C37C395426F1C30ba6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV2.sol">BorrowPositionProxyV2</a></td><td><a href="https://explorer.superseed.xyz/address/0xC06271eb97d960F4034DDF953e16271CcB2B10BD">0xC06271eb97d960F4034DDF953e16271CcB2B10BD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/DepositWithdrawalProxy.sol">DepositWithdrawalProxy</a></td><td><a href="https://explorer.superseed.xyz/address/0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6">0xd6a31B6AeA4d26A19bF479b5032D9DDc481187e6</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/EventEmitterRegistry.sol">EventEmitterRegistryProxy</a></td><td><a href="https://explorer.superseed.xyz/address/0x6d40138c99F6D9116F738F44A0E6751A42232486">0x6d40138c99F6D9116F738F44A0E6751A42232486</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/traders/Expiry.sol">ExpiryTrader</a></td><td><a href="https://explorer.superseed.xyz/address/0x2Ae007882b91206942c70ADc833A61Ee531D8D5D">0x2Ae007882b91206942c70ADc833A61Ee531D8D5D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/ExpiryProxy.sol">ExpiryProxy</a></td><td><a href="https://explorer.superseed.xyz/address/0x1B39F7C19d952752F255536e72726a592167e7Bc">0x1B39F7C19d952752F255536e72726a592167e7Bc</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/GenericTraderProxyV1.sol">GenericTraderProxyV1</a></td><td><a href="https://explorer.superseed.xyz/address/0xb50BcDFC914e0AfB484Dee621F49010862Fb928d">0xb50BcDFC914e0AfB484Dee621F49010862Fb928d</a></td></tr><tr><td><a href="https://app.safe.global/home?safe=base:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">GnosisSafe</a></td><td><a href="https://safe.optimism.io/home?safe=superseed:0x145637A4Aa6B2001DC9ECBc89CEf75bB960F90B2">0x145637A4Aa6B2001DC9ECBc89CEf75bB960F90B2</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/helpers/LiquidatorAssetRegistry.sol">LiquidatorAssetRegistry</a></td><td><a href="https://explorer.superseed.xyz/address/0xd82100524392c7DBDD7502F136A226c8a4c56CfA">0xd82100524392c7DBDD7502F136A226c8a4c56CfA</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV1.sol">LiquidatorProxyV1</a></td><td><a href="https://explorer.superseed.xyz/address/0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3">0xDB168cd1BcB63304991Fc6E2013D0D87DDbF99D3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol">LiquidatorProxyV4WithGenericTrader</a></td><td><a href="https://explorer.superseed.xyz/address/0x2aDeAFd960366411215ce8706C1aFE2853C5487B">0x2aDeAFd960366411215ce8706C1aFE2853C5487B</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/proxies/LiquidatorProxyV5.sol">LiquidatorProxyV5</a></td><td><a href="https://explorer.superseed.xyz/address/0x1506f80d2FD5fbeF2424573EC86E5481C972B99a">0x1506f80d2FD5fbeF2424573EC86E5481C972B99a</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/utils/MultiCall.sol">MultiCall</a></td><td><a href="https://explorer.superseed.xyz/address/0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A">0x58142bd85E67C40a7c0CCf2e1EEF6eB543617d2A</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/multisig/PartiallyDelayedMultiSig.sol">PartiallyDelayedMultiSig</a></td><td><a href="https://explorer.superseed.xyz/address/0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9">0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/TransferProxy.sol">TransferProxy</a></td><td><a href="https://explorer.superseed.xyz/address/0x07C28e60b28C98E09f5b69C9c473FE19062624f8">0x07C28e60b28C98E09f5b69C9c473FE19062624f8</a></td></tr></tbody></table>

### X Layer

<table><thead><tr><th width="324.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV1.sol">BorrowPositionProxyV1</a></td><td><a href="https://www.oklink.com/xlayer/address/0xB4F0eB9c8fb5FBabEF339f8738173dB645c4147d">0xB4F0eB9c8fb5FBabEF339f8738173dB645c4147d</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/BorrowPositionProxyV2.sol">BorrowPositionProxyV2</a></td><td><a href="https://www.oklink.com/xlayer/address/0x694F7Ba53e331D8494043A41262dC063B0F5C8b4">0x694F7Ba53e331D8494043A41262dC063B0F5C8b4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/DepositWithdrawalProxy.sol">DepositWithdrawalProxy</a></td><td><a href="https://www.oklink.com/xlayer/address/0xDC94f0C55c9A21b02f2743cf4B77Fa02329355Fd">0xDC94f0C55c9A21b02f2743cf4B77Fa02329355Fd</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/EventEmitterRegistry.sol">EventEmitterRegistryProxy</a></td><td><a href="https://www.oklink.com/xlayer/address/0xd86233E2E53a87F0735C5643f3189cfEC07269bF">0xd86233E2E53a87F0735C5643f3189cfEC07269bF</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/traders/Expiry.sol">ExpiryTrader</a></td><td><a href="https://www.oklink.com/xlayer/address/0x8B808a1fEEf1d9cdd00Fb46A19e4814e5646197C">0x8B808a1fEEf1d9cdd00Fb46A19e4814e5646197C</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/ExpiryProxy.sol">ExpiryProxy</a></td><td><a href="https://www.oklink.com/xlayer/address/0x6B68bDCCb22931937d7D11e556d95a07E02fE3CE">0x6B68bDCCb22931937d7D11e556d95a07E02fE3CE</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/GenericTraderProxyV1.sol">GenericTraderProxyV1</a></td><td><a href="https://www.oklink.com/xlayer/address/0xBF3179aD5339dCb6BD741Bc08c3011FAda586075">0xBF3179aD5339dCb6BD741Bc08c3011FAda586075</a></td></tr><tr><td><a href="https://app.safe.global/home?safe=base:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">GnosisSafe</a></td><td><a href="https://app.safe.global/home?safe=xlayer:0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4">0xa75c21C5BE284122a87A37a76cc6C4DD3E55a1D4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/helpers/LiquidatorAssetRegistry.sol">LiquidatorAssetRegistry</a></td><td><a href="https://www.oklink.com/xlayer/address/0x660bd80f67Aa9C7bFB82933e1068F8F616D88255">0x660bd80f67Aa9C7bFB82933e1068F8F616D88255</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV1.sol">LiquidatorProxyV1</a></td><td><a href="https://www.oklink.com/xlayer/address/0xD4480794D7b2bacbcB749462dD5e6f4C555036f3">0xD4480794D7b2bacbcB749462dD5e6f4C555036f3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol">LiquidatorProxyV4WithGenericTrader</a></td><td><a href="https://www.oklink.com/xlayer/address/0x17C57C98B666bac9F3DCE4033180190fe923F13d">0x17C57C98B666bac9F3DCE4033180190fe923F13d</a></td></tr><tr><td>LiquidatorProxyV5WithGenericTrader</td><td><a href="https://www.oklink.com/x-layer/address/0x1506f80d2fd5fbef2424573ec86e5481c972b99a">0x1506f80d2FD5fbeF2424573EC86E5481C972B99a</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/utils/MultiCall.sol">MultiCall</a></td><td><a href="https://www.oklink.com/xlayer/address/0x86CFc6BA3bbBC603b8deC5B032aFa10A3592470D">0x86CFc6BA3bbBC603b8deC5B032aFa10A3592470D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/multisig/PartiallyDelayedMultiSig.sol">PartiallyDelayedMultiSig</a></td><td><a href="https://www.oklink.com/xlayer/address/0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9">0x52d7BcB650c591f6E8da90f797A1d0Bfd8fD05F9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/proxies/TransferProxy.sol">TransferProxy</a></td><td><a href="https://www.oklink.com/xlayer/address/0xb3F81b0F53CDEe755c70665923e08a8f0e81d0c3">0xb3F81b0F53CDEe755c70665923e08a8f0e81d0c3</a></td></tr></tbody></table>


# Core - Routers

Dolomite's Core repository makes up the immutable layer of Dolomite Margin as well as a few important router and proxy contracts

## Dolomite Margin - Core

[![GitHub](https://img.shields.io/badge/GitHub-dolomite--exchange%2Fdolomite--margin-lightgrey)](https://github.com/dolomite-exchange/dolomite-margin-modules)

The `Core` router contracts are officially deployed to the following networks (and can be modified via call to Dolomite Margin from the owner):

### **Arbitrum One**

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/BorrowPositionRouter.sol">BorrowPositionRouter</a></td><td><a href="https://arbiscan.io/address/0xf579b345cda0860668b857de10abd62442133d0f">0xF579b345cdA0860668b857De10ABD62442133D0F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/DepositWithdrawalRouter.sol">DepositWithdrawalRouter</a></td><td><a href="https://arbiscan.io/address/0xf8b2c637a68cf6a17b1df9f8992eebeff63d2dff">0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/GenericTraderRouter.sol">GenericTraderRouter</a></td><td><a href="https://arbiscan.io/address/0x7b61cba306cfdb02493b94757143132b1b72bc6b">0x7b61CbA306CfdB02493b94757143132B1b72Bc6b</a></td></tr></tbody></table>

### **Base**

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/BorrowPositionRouter.sol">BorrowPositionRouter</a></td><td><a href="https://basescan.org/address/0xf579b345cda0860668b857de10abd62442133d0f">0xF579b345cdA0860668b857De10ABD62442133D0F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/DepositWithdrawalRouter.sol">DepositWithdrawalRouter</a></td><td><a href="https://basescan.org/address/0xf8b2c637a68cf6a17b1df9f8992eebeff63d2dff">0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/GenericTraderRouter.sol">GenericTraderRouter</a></td><td><a href="https://basescan.org/address/0x7b61cba306cfdb02493b94757143132b1b72bc6b">0x7b61CbA306CfdB02493b94757143132B1b72Bc6b</a></td></tr></tbody></table>

### Berachain

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/BorrowPositionRouter.sol">BorrowPositionRouter</a></td><td><a href="https://berascan.com/address/0xf579b345cda0860668b857de10abd62442133d0f">0xF579b345cdA0860668b857De10ABD62442133D0F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/DepositWithdrawalRouter.sol">DepositWithdrawalRouter</a></td><td><a href="https://berascan.com/address/0xf8b2c637a68cf6a17b1df9f8992eebeff63d2dff">0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/GenericTraderRouter.sol">GenericTraderRouter</a></td><td><a href="https://berascan.com/address/0x7b61cba306cfdb02493b94757143132b1b72bc6b">0x7b61CbA306CfdB02493b94757143132B1b72Bc6b</a></td></tr></tbody></table>

### Botanix

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/BorrowPositionRouter.sol">BorrowPositionRouter</a></td><td><a href="https://botanixscan.io/address/0xf579b345cda0860668b857de10abd62442133d0f">0xF579b345cdA0860668b857De10ABD62442133D0F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/DepositWithdrawalRouter.sol">DepositWithdrawalRouter</a></td><td><a href="https://botanixscan.io/address/0xf8b2c637a68cf6a17b1df9f8992eebeff63d2dff">0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/GenericTraderRouter.sol">GenericTraderRouter</a></td><td><a href="https://botanixscan.io/address/0x7b61cba306cfdb02493b94757143132b1b72bc6b">0x7b61CbA306CfdB02493b94757143132B1b72Bc6b</a></td></tr></tbody></table>

### **Ethereum Mainnet**

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/BorrowPositionRouter.sol">BorrowPositionRouter</a></td><td><a href="https://etherscan.io/address/0xf579b345cda0860668b857de10abd62442133d0f">0xF579b345cdA0860668b857De10ABD62442133D0F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/DepositWithdrawalRouter.sol">DepositWithdrawalRouter</a></td><td><a href="https://etherscan.io/address/0xf8b2c637a68cf6a17b1df9f8992eebeff63d2dff">0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/GenericTraderRouter.sol">GenericTraderRouter</a></td><td><a href="https://etherscan.io/address/0x7b61cba306cfdb02493b94757143132b1b72bc6b">0x7b61CbA306CfdB02493b94757143132B1b72Bc6b</a></td></tr></tbody></table>

### **Ink**

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/BorrowPositionRouter.sol">BorrowPositionRouter</a></td><td><a href="https://explorer.inkonchain.com/address/0xF579b345cdA0860668b857De10ABD62442133D0F">0xF579b345cdA0860668b857De10ABD62442133D0F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/DepositWithdrawalRouter.sol">DepositWithdrawalRouter</a></td><td><a href="https://explorer.inkonchain.com/address/0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf">0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/GenericTraderRouter.sol">GenericTraderRouter</a></td><td><a href="https://explorer.inkonchain.com/address/0x7b61CbA306CfdB02493b94757143132B1b72Bc6b">0x7b61CbA306CfdB02493b94757143132B1b72Bc6b</a></td></tr></tbody></table>

### **Mantle**

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/BorrowPositionRouter.sol">BorrowPositionRouter</a></td><td><a href="https://mantlescan.xyz/address/0xf579b345cda0860668b857de10abd62442133d0f">0xF579b345cdA0860668b857De10ABD62442133D0F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/DepositWithdrawalRouter.sol">DepositWithdrawalRouter</a></td><td><a href="https://mantlescan.xyz/address/0xf8b2c637a68cf6a17b1df9f8992eebeff63d2dff">0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/GenericTraderRouter.sol">GenericTraderRouter</a></td><td><a href="https://mantlescan.xyz/address/0x7b61cba306cfdb02493b94757143132b1b72bc6b">0x7b61CbA306CfdB02493b94757143132B1b72Bc6b</a></td></tr></tbody></table>

### Polygon zkEVM

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/BorrowPositionRouter.sol">BorrowPositionRouter</a></td><td><a href="https://zkevm.polygonscan.com/address/0xf579b345cda0860668b857de10abd62442133d0f">0xF579b345cdA0860668b857De10ABD62442133D0F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/DepositWithdrawalRouter.sol">DepositWithdrawalRouter</a></td><td><a href="https://zkevm.polygonscan.com/address/0xf8b2c637a68cf6a17b1df9f8992eebeff63d2dff">0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/GenericTraderRouter.sol">GenericTraderRouter</a></td><td><a href="https://zkevm.polygonscan.com/address/0x7b61cba306cfdb02493b94757143132b1b72bc6b">0x7b61CbA306CfdB02493b94757143132B1b72Bc6b</a></td></tr></tbody></table>

### Super Seed

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/BorrowPositionRouter.sol">BorrowPositionRouter</a></td><td><a href="https://explorer.superseed.xyz/address/0xF579b345cdA0860668b857De10ABD62442133D0F?tab=txs">0xF579b345cdA0860668b857De10ABD62442133D0F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/DepositWithdrawalRouter.sol">DepositWithdrawalRouter</a></td><td><a href="https://explorer.superseed.xyz/address/0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf">0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/GenericTraderRouter.sol">GenericTraderRouter</a></td><td><a href="https://explorer.superseed.xyz/address/0x7b61CbA306CfdB02493b94757143132B1b72Bc6b">0x7b61CbA306CfdB02493b94757143132B1b72Bc6b</a></td></tr></tbody></table>

### X Layer

<table><thead><tr><th width="327.3333333333333">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/BorrowPositionRouter.sol">BorrowPositionRouter</a></td><td><a href="https://www.oklink.com/x-layer/address/0xf579b345cda0860668b857de10abd62442133d0f">0xF579b345cdA0860668b857De10ABD62442133D0F</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/DepositWithdrawalRouter.sol">DepositWithdrawalRouter</a></td><td><a href="https://www.oklink.com/x-layer/address/0xf8b2c637a68cf6a17b1df9f8992eebeff63d2dff">0xf8b2c637A68cF6A17b1DF9F8992EeBeFf63d2dFf</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/routers/GenericTraderRouter.sol">GenericTraderRouter</a></td><td><a href="https://www.oklink.com/x-layer/address/0x7b61cba306cfdb02493b94757143132b1b72bc6b">0x7b61CbA306CfdB02493b94757143132B1b72Bc6b</a></td></tr></tbody></table>


# Module - dTokens

dTokens Enable Rapid Composability between Dolomite and 3rd Party Integrations

To learn more about Dolomite's dTokens and view the contract addresses, [visit this page](/developer-documentation/dolomite-margin-dtokens).


# Module - DOLO

Dolomite tokenomics contracts

## Dolomite Margin - Modules

<div align="left"><figure><img src="https://img.shields.io/badge/GitHub-dolomite--exchange%2Fdolomite--margin--modules-lightgrey" alt=""><figcaption></figcaption></figure></div>

### Arbitrum One

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/DOLOWithOwnable.sol">DOLO</a></td><td><a href="https://arbiscan.io/address/0x0f81001ef0a83ecce5ccebf63eb302c70a39a654#tokentxns">0x0F81001eF0A83ecCE5ccebf63EB302c70a39a654</a></td></tr></tbody></table>

### Berachain

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/VestingClaims.sol">Advisor Claims</a></td><td><a href="https://berascan.com/address/0xbd225C09E4b032E41d5e8AEA5F81EfFF45F20F7b">0xbd225C09E4b032E41d5e8AEA5F81EfFF45F20F7b</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/DOLOWithOwnable.sol">DOLO</a></td><td><a href="https://berascan.com/address/0x0f81001ef0a83ecce5ccebf63eb302c70a39a654">0x0F81001eF0A83ecCE5ccebf63EB302c70a39a654</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/VestingClaims.sol">Investor Claims</a></td><td><a href="https://berascan.com/address/0x3a025C7fCF7632197ea82e64ACD6fF53E1C06C07">0x3a025C7fCF7632197ea82e64ACD6fF53E1C06C07</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/ODOLO.sol">oDOLO</a></td><td><a href="https://berascan.com/address/0x02e513b5b54ee216bf836ceb471507488fc89543">0x02E513b5B54eE216Bf836ceb471507488fC89543</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/VeExternalVesterImplementationV1.sol">oDOLO Vester</a></td><td><a href="https://berascan.com/address/0x3E9b9A16743551DA49b5e136C716bBa7932d2cEc">0x3E9b9A16743551DA49b5e136C716bBa7932d2cEc</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/OptionAirdrop.sol">Option Airdrop</a></td><td><a href="https://berascan.com/address/0xD88f473832b0403c7736EF237aF5aFF8759B99Ef">0xD88f473832b0403c7736EF237aF5aFF8759B99Ef</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/RegularAirdrop.sol">Regular Airdrop</a></td><td><a href="https://berascan.com/address/0xa3f079292cC35BA64996Fe0bcE3049928a838bC9">0xa3f079292cC35BA64996Fe0bcE3049928a838bC9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/StrategicVestingClaims.sol">Strategic Investor Claims</a></td><td><a href="https://berascan.com/address/0x7eFD088aE500598A19a242D6D48b9f7E0d061176">0x7eFD088aE500598A19a242D6D48b9f7E0d061176</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/VeArt.sol">veArt</a></td><td><a href="https://berascan.com/address/0x54267e603646648e623a7A3c21DBbD4cd968a6f0">0x54267e603646648e623a7A3c21DBbD4cd968a6f0</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/VotingEscrow.sol">veDOLO</a></td><td><a href="https://berascan.com/address/0xcb86b75ee6133d179a12d550b09fb3cdb1e141d4">0xCB86B75EE6133d179a12D550b09FB3cdB1e141D4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/VeFeeCalculator.sol">veFeeCalculator</a></td><td><a href="https://berascan.com/address/0xa7b2c7B13E7628b70DDA64a257767F7292917cE9">0xa7b2c7B13E7628b70DDA64a257767F7292917cE9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/RollingClaims.sol">oDOLO Claims</a></td><td><a href="https://berascan.com/address/0x79e6e932bf6686a4d357d7821e6e08835ba8a026">0x79E6E932bf6686a4D357D7821E6e08835Ba8A026</a></td></tr></tbody></table>

### Ethereum Mainnet

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/tokenomics/contracts/DOLOWithOwnable.sol">DOLO</a></td><td><a href="https://etherscan.io/address/0x0f81001ef0a83ecce5ccebf63eb302c70a39a654">0x0F81001eF0A83ecCE5ccebf63EB302c70a39a654</a></td></tr></tbody></table>


# Module - General

Some generic helper contracts have been developed in the Modules repository to unify the dev experience

## Dolomite Margin - Modules

<div align="left"><figure><img src="https://img.shields.io/badge/GitHub-dolomite--exchange%2Fdolomite--margin--modules-lightgrey" alt=""><figcaption></figcaption></figure></div>

### Arbitrum One

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/interestsetters/AlwaysZeroInterestSetter.sol">AlwaysZeroInterestSetter</a></td><td><a href="https://arbiscan.io/address/0x37b6fF70654EDfBdAA3c9a723fdAdF5844De2168">0x37b6fF70654EDfBdAA3c9a723fdAdF5844De2168</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChainlinkPriceOracleV3.sol">ChainlinkPriceOracle</a></td><td><a href="https://arbiscan.io/address/0x8FA6d763CA105B3C88fd01317db2E66021208451">0x8FA6d763CA105B3C88fd01317db2E66021208451</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChaosLabsPriceOracleV3.sol">ChaosLabsPriceOracle</a></td><td><a href="https://arbiscan.io/address/0xB02808f5db0E6926E00AF4971AbdF1dA6C7DB34e">0xB02808f5db0E6926E00AF4971AbdF1dA6C7DB34e</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChroniclePriceOracleV3.sol">ChroniclePriceOracle</a></td><td><a href="https://arbiscan.io/address/0x8990A46Fd1F2E00b8eb85DAfd85735d2B5Ed4Eeb">0x8990A46Fd1F2E00b8eb85DAfd85735d2B5Ed4Eeb</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/deployment/src/contracts/CREATE3Factory.sol">CREATE3Factory</a></td><td><a href="https://arbiscan.io/address/0xa8F7e7A361De6A2172fcb2accE68bd21597599F7">0xa8F7e7A361De6A2172fcb2accE68bd21597599F7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteAccountRegistry.sol">DolomiteAccountRegistryProxy</a></td><td><a href="https://arbiscan.io/address/0xC777fB526922fB61581b65f8eb55bb769CD59C63">0xC777fB526922fB61581b65f8eb55bb769CD59C63</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteMigrator.sol">DolomiteMigrator</a></td><td><a href="https://arbiscan.io/address/0xD5545e44d6BaEd250781375FCb98d9Bdc7f5afc9">0xD5545e44d6BaEd250781375FCb98d9Bdc7f5afc9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteOwnerV1.sol">DolomiteOwnerV1</a></td><td><a href="https://arbiscan.io/address/0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D">0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/admin/contracts/DolomiteOwnerV2.sol">DolomiteOwnerV2</a></td><td><a href="https://arbiscan.io/address/0xc2b66e247dae5ee749ae1d827190115f3653de06#code">0xC2B66E247daE5Ee749Ae1d827190115F3653dE06</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/RegistryProxy.sol">DolomiteRegistryProxy</a></td><td><a href="https://arbiscan.io/address/0x2A059D6d682e5fB1226eB8bC2977b512698C2404">0x2A059D6d682e5fB1226eB8bC2977b512698C2404</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/liquidators/IsolationModeFreezableLiquidatorProxy.sol">IsolationModeFreezableLiquidatorProxy</a></td><td><a href="https://arbiscan.io/address/0x76Ac5542eE033A15f78D1f8B4aD48af618a33E44">0x76Ac5542eE033A15f78D1f8B4aD48af618a33E44</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/interest-setters/contracts/LinearStepFunctionInterestSetter.sol">LinearStepFunctionInterestSetter</a></td><td>Various (depends on configuration)</td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/traders/OdosAggregatorTrader.sol">OdosAggregatorTrader</a></td><td><a href="https://arbiscan.io/address/0x2cdBb25b4aca98a55F6B1A0f67d9f43455e67f3c">0x2cdBb25b4aca98a55F6B1A0f67d9f43455e67f3c</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OracleAggregatorV2.sol">OracleAggregator</a></td><td><a href="https://arbiscan.io/address/0xBfca44aB734E57Dc823cA609a0714EeC9ED06cA0">0xBfca44aB734E57Dc823cA609a0714EeC9ED06cA0</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/traders/ParaswapAggregatorTraderV2.sol">ParaswapAggregatorTraderV2</a></td><td><a href="https://arbiscan.io/address/0xd991d9e0a22a51391c25b258eef8c1c4a392383a">0xd991d9E0a22a51391c25B258eeF8C1c4a392383a</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/RedstonePriceOracleV3.sol">RedstonePriceOracle</a></td><td><a href="https://arbiscan.io/address/0x5fBAe9cbbc209efDf2054e050Baf5a0783Be01d2">0x5fBAe9cbbc209efDf2054e050Baf5a0783Be01d2</a></td></tr></tbody></table>

### Base

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/interestsetters/AlwaysZeroInterestSetter.sol">AlwaysZeroInterestSetter</a></td><td><a href="https://basescan.org/address/0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2">0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChainlinkPriceOracleV3.sol">ChainlinkPriceOracle</a></td><td><a href="https://basescan.org/address/0x465E5105e6106aCd15E491953bB7b674247AE191">0x465E5105e6106aCd15E491953bB7b674247AE191</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChroniclePriceOracleV3.sol">ChroniclePriceOracle</a></td><td><a href="https://basescan.org/address/0xb6B3EaF640707688186e7df34aC7d21fAbAf4359">0xb6B3EaF640707688186e7df34aC7d21fAbAf4359</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/deployment/src/contracts/CREATE3Factory.sol">CREATE3Factory</a></td><td><a href="https://basescan.org/address/0xa8F7e7A361De6A2172fcb2accE68bd21597599F7">0xa8F7e7A361De6A2172fcb2accE68bd21597599F7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteAccountRegistry.sol">DolomiteAccountRegistryProxy</a></td><td><a href="https://basescan.org/address/0xFee366CECA2472B99d0A501b6B3d01351c24dAaE">0xFee366CECA2472B99d0A501b6B3d01351c24dAaE</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteMigrator.sol">DolomiteMigrator</a></td><td><a href="https://basescan.org/address/0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3">0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteOwnerV1.sol">DolomiteOwnerV1</a></td><td><a href="https://basescan.org/address/0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D">0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/admin/contracts/DolomiteOwnerV2.sol">DolomiteOwnerV2</a></td><td><a href="https://basescan.org/address/0xc2b66e247dae5ee749ae1d827190115f3653de06">0xC2B66E247daE5Ee749Ae1d827190115F3653dE06</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/RegistryProxy.sol">DolomiteRegistryProxy</a></td><td><a href="https://basescan.org/address/0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD">0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/liquidators/IsolationModeFreezableLiquidatorProxy.sol">IsolationModeFreezableLiquidatorProxy</a></td><td><a href="https://basescan.org/address/0x8D178ff41F94aE761325451529750166d35C8870">0x8D178ff41F94aE761325451529750166d35C8870</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/interest-setters/contracts/LinearStepFunctionInterestSetter.sol">LinearStepFunctionInterestSetter</a></td><td>Various (depends on configuration)</td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OracleAggregatorV2.sol">OracleAggregator</a></td><td><a href="https://basescan.org/address/0xa150Ef2D5827dB283321D15d62d5D07fB41d636E">0xa150Ef2D5827dB283321D15d62d5D07fB41d636E</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/RedstonePriceOracleV3.sol">RedstonePriceOracle</a></td><td><a href="https://basescan.org/address/0xe09f85B284C177c8325c5cCAeaE30a14494CDD45">0xe09f85B284C177c8325c5cCAeaE30a14494CDD45</a></td></tr></tbody></table>

### Berachain

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/interestsetters/AlwaysZeroInterestSetter.sol">AlwaysZeroInterestSetter</a></td><td><a href="https://berascan.com/address/0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2">0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChainlinkPriceOracleV3.sol">ChainlinkPriceOracle</a></td><td><a href="https://berascan.com/address/0x465E5105e6106aCd15E491953bB7b674247AE191">0x465E5105e6106aCd15E491953bB7b674247AE191</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChroniclePriceOracleV3.sol">ChroniclePriceOracle</a></td><td><a href="https://berascan.com/address/0xb6B3EaF640707688186e7df34aC7d21fAbAf4359">0xb6B3EaF640707688186e7df34aC7d21fAbAf4359</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/deployment/src/contracts/CREATE3Factory.sol">CREATE3Factory</a></td><td><a href="https://berascan.com/address/0xa8F7e7A361De6A2172fcb2accE68bd21597599F7">0xa8F7e7A361De6A2172fcb2accE68bd21597599F7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteAccountRegistry.sol">DolomiteAccountRegistryProxy</a></td><td><a href="https://berascan.com/address/0xFee366CECA2472B99d0A501b6B3d01351c24dAaE">0xFee366CECA2472B99d0A501b6B3d01351c24dAaE</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteMigrator.sol">DolomiteMigrator</a></td><td><a href="https://berascan.com/address/0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3">0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteOwnerV1.sol">DolomiteOwnerV1</a></td><td><a href="https://berascan.com/address/0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D">0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/admin/contracts/DolomiteOwnerV2.sol">DolomiteOwnerV2</a></td><td><a href="https://berascan.com/address/0xc2b66e247dae5ee749ae1d827190115f3653de06">0xC2B66E247daE5Ee749Ae1d827190115F3653dE06</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/RegistryProxy.sol">DolomiteRegistryProxy</a></td><td><a href="https://berascan.com/address/0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD">0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/liquidators/IsolationModeFreezableLiquidatorProxy.sol">IsolationModeFreezableLiquidatorProxy</a></td><td><a href="https://berascan.com/address/0x8D178ff41F94aE761325451529750166d35C8870">0x8D178ff41F94aE761325451529750166d35C8870</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/interest-setters/contracts/LinearStepFunctionInterestSetter.sol">LinearStepFunctionInterestSetter</a></td><td>Various (depends on configuration)</td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OracleAggregatorV2.sol">OracleAggregator</a></td><td><a href="https://berascan.com/address/0xa150Ef2D5827dB283321D15d62d5D07fB41d636E">0xa150Ef2D5827dB283321D15d62d5D07fB41d636E</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/RedstonePriceOracleV3.sol">RedstonePriceOracle</a></td><td><a href="https://berascan.com/address/0xe09f85B284C177c8325c5cCAeaE30a14494CDD45">0xe09f85B284C177c8325c5cCAeaE30a14494CDD45</a></td></tr></tbody></table>

### Botanix

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/interestsetters/AlwaysZeroInterestSetter.sol">AlwaysZeroInterestSetter</a></td><td><a href="https://botanixscan.io/address/0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2">0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChainlinkPriceOracleV3.sol">ChainlinkPriceOracle</a></td><td><a href="https://botanixscan.io/address/0x465E5105e6106aCd15E491953bB7b674247AE191">0x465E5105e6106aCd15E491953bB7b674247AE191</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChroniclePriceOracleV3.sol">ChroniclePriceOracle</a></td><td><a href="https://botanixscan.io/address/0xb6B3EaF640707688186e7df34aC7d21fAbAf4359">0xb6B3EaF640707688186e7df34aC7d21fAbAf4359</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/deployment/src/contracts/CREATE3Factory.sol">CREATE3Factory</a></td><td><a href="https://botanixscan.io/address/0xa8F7e7A361De6A2172fcb2accE68bd21597599F7">0xa8F7e7A361De6A2172fcb2accE68bd21597599F7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteAccountRegistry.sol">DolomiteAccountRegistryProxy</a></td><td><a href="https://botanixscan.io/address/0xFee366CECA2472B99d0A501b6B3d01351c24dAaE">0xFee366CECA2472B99d0A501b6B3d01351c24dAaE</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteMigrator.sol">DolomiteMigrator</a></td><td><a href="https://botanixscan.io/address/0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3">0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteOwnerV1.sol">DolomiteOwnerV1</a></td><td><a href="https://botanixscan.io/address/0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D">0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/admin/contracts/DolomiteOwnerV2.sol">DolomiteOwnerV2</a></td><td><a href="https://botanixscan.io/address/0xc2b66e247dae5ee749ae1d827190115f3653de06">0xC2B66E247daE5Ee749Ae1d827190115F3653dE06</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/RegistryProxy.sol">DolomiteRegistryProxy</a></td><td><a href="https://botanixscan.io/address/0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD">0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/liquidators/IsolationModeFreezableLiquidatorProxy.sol">IsolationModeFreezableLiquidatorProxy</a></td><td><a href="https://botanixscan.io/address/0x8D178ff41F94aE761325451529750166d35C8870">0x8D178ff41F94aE761325451529750166d35C8870</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/interest-setters/contracts/LinearStepFunctionInterestSetter.sol">LinearStepFunctionInterestSetter</a></td><td>Various (depends on configuration)</td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OracleAggregatorV2.sol">OracleAggregator</a></td><td><a href="https://botanixscan.io/address/0xa150Ef2D5827dB283321D15d62d5D07fB41d636E">0xa150Ef2D5827dB283321D15d62d5D07fB41d636E</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/RedstonePriceOracleV3.sol">RedstonePriceOracle</a></td><td><a href="https://botanixscan.io/address/0xe09f85B284C177c8325c5cCAeaE30a14494CDD45">0xe09f85B284C177c8325c5cCAeaE30a14494CDD45</a></td></tr></tbody></table>

### Ethereum Mainnet

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/interestsetters/AlwaysZeroInterestSetter.sol">AlwaysZeroInterestSetter</a></td><td><a href="https://etherscan.io/address/0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2">0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChainlinkPriceOracleV3.sol">ChainlinkPriceOracle</a></td><td><a href="https://etherscan.io/address/0x465E5105e6106aCd15E491953bB7b674247AE191">0x465E5105e6106aCd15E491953bB7b674247AE191</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChroniclePriceOracleV3.sol">ChroniclePriceOracle</a></td><td><a href="https://etherscan.io/address/0xb6B3EaF640707688186e7df34aC7d21fAbAf4359">0xb6B3EaF640707688186e7df34aC7d21fAbAf4359</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/deployment/src/contracts/CREATE3Factory.sol">CREATE3Factory</a></td><td><a href="https://etherscan.io/address/0xa8F7e7A361De6A2172fcb2accE68bd21597599F7">0xa8F7e7A361De6A2172fcb2accE68bd21597599F7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteAccountRegistry.sol">DolomiteAccountRegistryProxy</a></td><td><a href="https://etherscan.io/address/0xFee366CECA2472B99d0A501b6B3d01351c24dAaE">0xFee366CECA2472B99d0A501b6B3d01351c24dAaE</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteMigrator.sol">DolomiteMigrator</a></td><td><a href="https://etherscan.io/address/0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3">0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteOwnerV1.sol">DolomiteOwnerV1</a></td><td><a href="https://etherscan.io/address/0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D">0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/admin/contracts/DolomiteOwnerV2.sol">DolomiteOwnerV2</a></td><td><a href="https://etherscan.io/address/0xc2b66e247dae5ee749ae1d827190115f3653de06">0xC2B66E247daE5Ee749Ae1d827190115F3653dE06</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/RegistryProxy.sol">DolomiteRegistryProxy</a></td><td><a href="https://etherscan.io/address/0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD">0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/liquidators/IsolationModeFreezableLiquidatorProxy.sol">IsolationModeFreezableLiquidatorProxy</a></td><td><a href="https://etherscan.io/address/0x8D178ff41F94aE761325451529750166d35C8870">0x8D178ff41F94aE761325451529750166d35C8870</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/interest-setters/contracts/LinearStepFunctionInterestSetter.sol">LinearStepFunctionInterestSetter</a></td><td>Various (depends on configuration)</td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OracleAggregatorV2.sol">OracleAggregator</a></td><td><a href="https://etherscan.io/address/0xa150Ef2D5827dB283321D15d62d5D07fB41d636E">0xa150Ef2D5827dB283321D15d62d5D07fB41d636E</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/RedstonePriceOracleV3.sol">RedstonePriceOracle</a></td><td><a href="https://etherscan.io/address/0xe09f85B284C177c8325c5cCAeaE30a14494CDD45">0xe09f85B284C177c8325c5cCAeaE30a14494CDD45</a></td></tr></tbody></table>

### Ink

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/interestsetters/AlwaysZeroInterestSetter.sol">AlwaysZeroInterestSetter</a></td><td><a href="https://explorer.inkonchain.com/address/0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2">0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChainlinkPriceOracleV3.sol">ChainlinkPriceOracle</a></td><td><a href="https://explorer.inkonchain.com/address/0x465E5105e6106aCd15E491953bB7b674247AE191">0x465E5105e6106aCd15E491953bB7b674247AE191</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChroniclePriceOracleV3.sol">ChroniclePriceOracle</a></td><td><a href="https://explorer.inkonchain.com/address/0xb6B3EaF640707688186e7df34aC7d21fAbAf4359">0xb6B3EaF640707688186e7df34aC7d21fAbAf4359</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/deployment/src/contracts/CREATE3Factory.sol">CREATE3Factory</a></td><td><a href="https://explorer.inkonchain.com/address/0xa8F7e7A361De6A2172fcb2accE68bd21597599F7">0xa8F7e7A361De6A2172fcb2accE68bd21597599F7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteAccountRegistry.sol">DolomiteAccountRegistryProxy</a></td><td><a href="https://explorer.inkonchain.com/address/0xFee366CECA2472B99d0A501b6B3d01351c24dAaE">0xFee366CECA2472B99d0A501b6B3d01351c24dAaE</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteMigrator.sol">DolomiteMigrator</a></td><td><a href="https://explorer.inkonchain.com/address/0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3">0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteOwnerV1.sol">DolomiteOwnerV1</a></td><td><a href="https://explorer.inkonchain.com/address/0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D">0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/admin/contracts/DolomiteOwnerV2.sol">DolomiteOwnerV2</a></td><td><a href="https://explorer.inkonchain.com/address/0xC2B66E247daE5Ee749Ae1d827190115F3653dE06?tab=contract">0xC2B66E247daE5Ee749Ae1d827190115F3653dE06</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/RegistryProxy.sol">DolomiteRegistryProxy</a></td><td><a href="https://explorer.inkonchain.com/address/0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD">0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/liquidators/IsolationModeFreezableLiquidatorProxy.sol">IsolationModeFreezableLiquidatorProxy</a></td><td><a href="https://explorer.inkonchain.com/address/0x8D178ff41F94aE761325451529750166d35C8870">0x8D178ff41F94aE761325451529750166d35C8870</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/interest-setters/contracts/LinearStepFunctionInterestSetter.sol">LinearStepFunctionInterestSetter</a></td><td>Various (depends on configuration)</td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OracleAggregatorV2.sol">OracleAggregator</a></td><td><a href="https://explorer.inkonchain.com/address/0xa150Ef2D5827dB283321D15d62d5D07fB41d636E">0xa150Ef2D5827dB283321D15d62d5D07fB41d636E</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/RedstonePriceOracleV3.sol">RedstonePriceOracle</a></td><td><a href="https://explorer.inkonchain.com/address/0xe09f85B284C177c8325c5cCAeaE30a14494CDD45">0xe09f85B284C177c8325c5cCAeaE30a14494CDD45</a></td></tr></tbody></table>

### Mantle

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/interestsetters/AlwaysZeroInterestSetter.sol">AlwaysZeroInterestSetter</a></td><td><a href="https://mantlescan.xyz/address/0x3f0269Aac5D3FA3Cd518d9e809f45458c1504923">0x3f0269Aac5D3FA3Cd518d9e809f45458c1504923</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChainlinkPriceOracleV3.sol">ChainlinkPriceOracle</a></td><td><a href="https://mantlescan.xyz/address/0x9101ddA4c53caF2F85e39C4f135474a37Eddd6b5">0x9101ddA4c53caF2F85e39C4f135474a37Eddd6b5</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChroniclePriceOracleV3.sol">ChroniclePriceOracle</a></td><td><a href="https://mantlescan.xyz/address/0xe4d3450d52EDF515433FEc12eaEFFFBfa83250b9">0xe4d3450d52EDF515433FEc12eaEFFFBfa83250b9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/deployment/src/contracts/CREATE3Factory.sol">CREATE3Factory</a></td><td><a href="https://mantlescan.xyz/address/0xa8F7e7A361De6A2172fcb2accE68bd21597599F7">0xa8F7e7A361De6A2172fcb2accE68bd21597599F7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteAccountRegistry.sol">DolomiteAccountRegistryProxy</a></td><td><a href="https://mantlescan.xyz/address/0xc90e5Df165c26441F6F4e558ca6128A42eb95787">0xc90e5Df165c26441F6F4e558ca6128A42eb95787</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteMigrator.sol">DolomiteMigrator</a></td><td><a href="https://mantlescan.xyz/address/0x481Ef837a6266a0798F0465e14d9A38400843CBd">0x481Ef837a6266a0798F0465e14d9A38400843CBd</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteOwnerV1.sol">DolomiteOwnerV1</a></td><td><a href="https://mantlescan.xyz/address/0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D">0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/admin/contracts/DolomiteOwnerV2.sol">DolomiteOwnerV2</a></td><td><a href="https://mantlescan.xyz/address/0xc2b66e247dae5ee749ae1d827190115f3653de06">0xC2B66E247daE5Ee749Ae1d827190115F3653dE06</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/RegistryProxy.sol">DolomiteRegistryProxy</a></td><td><a href="https://mantlescan.xyz/address/0x7bec164caCD60D5cBcAa7b81d9dA4cf6A0F7e09B">0x7bec164caCD60D5cBcAa7b81d9dA4cf6A0F7e09B</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/liquidators/IsolationModeFreezableLiquidatorProxy.sol">IsolationModeFreezableLiquidatorProxy</a></td><td><a href="https://mantlescan.xyz/address/0xfEd1F92936fb71da71ECf2D22543A85489E259A4">0xfEd1F92936fb71da71ECf2D22543A85489E259A4</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/interest-setters/contracts/LinearStepFunctionInterestSetter.sol">LinearStepFunctionInterestSetter</a></td><td>Various (depends on configuration)</td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OracleAggregatorV2.sol">OracleAggregator</a></td><td><a href="https://mantlescan.xyz/address/0x2c640B79Ff62908fAE611e6a445c7E480324B77d">0x2c640B79Ff62908fAE611e6a445c7E480324B77d</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/RedstonePriceOracleV3.sol">RedstonePriceOracle</a></td><td><a href="https://mantlescan.xyz/address/0x6B15c3F0D266be946eA2d33C40d1a7204C8403a2">0x6B15c3F0D266be946eA2d33C40d1a7204C8403a2</a></td></tr></tbody></table>

### Polygon zkEVM

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/interestsetters/AlwaysZeroInterestSetter.sol">AlwaysZeroInterestSetter</a></td><td><a href="https://zkevm.polygonscan.com/address/0xc90e5Df165c26441F6F4e558ca6128A42eb95787">0xc90e5Df165c26441F6F4e558ca6128A42eb95787</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChainlinkPriceOracleV3.sol">ChainlinkPriceOracle</a></td><td><a href="https://zkevm.polygonscan.com/address/0x4723da2196668D26c76885fe23d568e9688F812D">0x4723da2196668D26c76885fe23d568e9688F812D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChroniclePriceOracleV3.sol">ChroniclePriceOracle</a></td><td><a href="https://zkevm.polygonscan.com/address/0xb6B3EaF640707688186e7df34aC7d21fAbAf4359">0xb6B3EaF640707688186e7df34aC7d21fAbAf4359</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/deployment/src/contracts/CREATE3Factory.sol">CREATE3Factory</a></td><td><a href="https://zkevm.polygonscan.com/address/0xa8F7e7A361De6A2172fcb2accE68bd21597599F7">0xa8F7e7A361De6A2172fcb2accE68bd21597599F7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteAccountRegistry.sol">DolomiteAccountRegistryProxy</a></td><td><a href="https://zkevm.polygonscan.com/address/0x08e86624cA88e702d1c43557aD82E84EF222fe96">0x08e86624cA88e702d1c43557aD82E84EF222fe96</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteMigrator.sol">DolomiteMigrator</a></td><td><a href="https://zkevm.polygonscan.com/address/0x64f7a2A0F32654B09C66aa64405661F27039A249">0x64f7a2A0F32654B09C66aa64405661F27039A249</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteOwnerV1.sol">DolomiteOwnerV1</a></td><td><a href="https://zkevm.polygonscan.com/address/0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D">0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/admin/contracts/DolomiteOwnerV2.sol">DolomiteOwnerV2</a></td><td><a href="https://zkevm.polygonscan.com/address/0xc2b66e247dae5ee749ae1d827190115f3653de06#code">0xC2B66E247daE5Ee749Ae1d827190115F3653dE06</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/RegistryProxy.sol">DolomiteRegistryProxy</a></td><td><a href="https://zkevm.polygonscan.com/address/0x6D35bFE1De1e2c311e347e306fc6770daB1b0a57">0x6D35bFE1De1e2c311e347e306fc6770daB1b0a57</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/liquidators/IsolationModeFreezableLiquidatorProxy.sol">IsolationModeFreezableLiquidatorProxy</a></td><td><a href="https://zkevm.polygonscan.com/address/0xBF3179aD5339dCb6BD741Bc08c3011FAda586075">0xBF3179aD5339dCb6BD741Bc08c3011FAda586075</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/interest-setters/contracts/LinearStepFunctionInterestSetter.sol">LinearStepFunctionInterestSetter</a></td><td>Various (depends on configuration)</td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OracleAggregatorV2.sol">OracleAggregator</a></td><td><a href="https://zkevm.polygonscan.com/address/0x02942CDe28029D13e070fc5FFd160e51E44522cc">0x02942CDe28029D13e070fc5FFd160e51E44522cc</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/RedstonePriceOracleV3.sol">RedstonePriceOracle</a></td><td><a href="https://zkevm.polygonscan.com/address/0xe09f85B284C177c8325c5cCAeaE30a14494CDD45">0xe09f85B284C177c8325c5cCAeaE30a14494CDD45</a></td></tr></tbody></table>

### Super Seed

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/interestsetters/AlwaysZeroInterestSetter.sol">AlwaysZeroInterestSetter</a></td><td><a href="https://explorer.superseed.xyz/address/0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2">0x9EcBbCeB49C39A59D18b064b7049aAC2d4D28ca2</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChainlinkPriceOracleV3.sol">ChainlinkPriceOracle</a></td><td><a href="https://explorer.superseed.xyz/address/0x465E5105e6106aCd15E491953bB7b674247AE191">0x465E5105e6106aCd15E491953bB7b674247AE191</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChroniclePriceOracleV3.sol">ChroniclePriceOracle</a></td><td><a href="https://explorer.superseed.xyz/address/0xb6B3EaF640707688186e7df34aC7d21fAbAf4359">0xb6B3EaF640707688186e7df34aC7d21fAbAf4359</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/deployment/src/contracts/CREATE3Factory.sol">CREATE3Factory</a></td><td><a href="https://explorer.superseed.xyz/address/0xa8F7e7A361De6A2172fcb2accE68bd21597599F7">0xa8F7e7A361De6A2172fcb2accE68bd21597599F7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteAccountRegistry.sol">DolomiteAccountRegistryProxy</a></td><td><a href="https://explorer.superseed.xyz/address/0xFee366CECA2472B99d0A501b6B3d01351c24dAaE">0xFee366CECA2472B99d0A501b6B3d01351c24dAaE</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteMigrator.sol">DolomiteMigrator</a></td><td><a href="https://explorer.superseed.xyz/address/0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3">0x9E97D89c44C3f213DB22593aF98165A1B9e7A0d3</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteOwnerV1.sol">DolomiteOwnerV1</a></td><td><a href="https://explorer.superseed.xyz/address/0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D">0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/admin/contracts/DolomiteOwnerV2.sol">DolomiteOwnerV2</a></td><td><a href="https://explorer.superseed.xyz/address/0xC2B66E247daE5Ee749Ae1d827190115F3653dE06">0xC2B66E247daE5Ee749Ae1d827190115F3653dE06</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/RegistryProxy.sol">DolomiteRegistryProxy</a></td><td><a href="https://explorer.superseed.xyz/address/0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD">0x0F38bFBd9c1450BCF7A758e80E148CE78cfE09fD</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/liquidators/IsolationModeFreezableLiquidatorProxy.sol">IsolationModeFreezableLiquidatorProxy</a></td><td><a href="https://explorer.superseed.xyz/address/0x8D178ff41F94aE761325451529750166d35C8870">0x8D178ff41F94aE761325451529750166d35C8870</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/interest-setters/contracts/LinearStepFunctionInterestSetter.sol">LinearStepFunctionInterestSetter</a></td><td>Various (depends on configuration)</td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OracleAggregatorV2.sol">OracleAggregator</a></td><td><a href="https://explorer.superseed.xyz/address/0xa150Ef2D5827dB283321D15d62d5D07fB41d636E">0xa150Ef2D5827dB283321D15d62d5D07fB41d636E</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/RedstonePriceOracleV3.sol">RedstonePriceOracle</a></td><td><a href="https://explorer.superseed.xyz/address/0xe09f85B284C177c8325c5cCAeaE30a14494CDD45">0xe09f85B284C177c8325c5cCAeaE30a14494CDD45</a></td></tr></tbody></table>

### X Layer

<table><thead><tr><th width="347">Contract Name</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin/blob/v2/contracts/external/interestsetters/AlwaysZeroInterestSetter.sol">AlwaysZeroInterestSetter</a></td><td><a href="https://www.oklink.com/xlayer/address/0xA5F4CEB032a1d7C711BB8AE687F9AB13a976e2E9">0xA5F4CEB032a1d7C711BB8AE687F9AB13a976e2E9</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChainlinkPriceOracleV3.sol">ChainlinkPriceOracle</a></td><td><a href="https://www.oklink.com/xlayer/address/0xb5995593302979dd399F902F37063Ac1805139FE">0xb5995593302979dd399F902F37063Ac1805139FE</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/ChroniclePriceOracleV3.sol">ChroniclePriceOracle</a></td><td><a href="https://www.oklink.com/xlayer/address/0xb6B3EaF640707688186e7df34aC7d21fAbAf4359">0xb6B3EaF640707688186e7df34aC7d21fAbAf4359</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/deployment/src/contracts/CREATE3Factory.sol">CREATE3Factory</a></td><td><a href="https://www.oklink.com/xlayer/address/0xa8F7e7A361De6A2172fcb2accE68bd21597599F7">0xa8F7e7A361De6A2172fcb2accE68bd21597599F7</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteAccountRegistry.sol">DolomiteAccountRegistryProxy</a></td><td><a href="https://www.oklink.com/xlayer/address/0x14B83b01091636709A468386877619d34D431C63">0x14B83b01091636709A468386877619d34D431C63</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteMigrator.sol">DolomiteMigrator</a></td><td><a href="https://www.oklink.com/xlayer/address/0x987AFbff1487BF2B6B9b19238C1cfbcFd1D8A7b1">0x987AFbff1487BF2B6B9b19238C1cfbcFd1D8A7b1</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/general/DolomiteOwnerV1.sol">DolomiteOwnerV1</a></td><td><a href="https://www.oklink.com/xlayer/address/0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D">0xCf359A2fa50548c6793a5eD7F26471c1B17Bb11D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/admin/contracts/DolomiteOwnerV2.sol">DolomiteOwnerV2</a></td><td><a href="https://www.oklink.com/x-layer/address/0xc2b66e247dae5ee749ae1d827190115f3653de06/contract">0xC2B66E247daE5Ee749Ae1d827190115F3653dE06</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/contracts/external/general/RegistryProxy.sol">DolomiteRegistryProxy</a></td><td><a href="https://www.oklink.com/xlayer/address/0x63BD442334D457B58742a72B88abeaeFfef6D451">0x63BD442334D457B58742a72B88abeaeFfef6D451</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/base/contracts/liquidators/IsolationModeFreezableLiquidatorProxy.sol">IsolationModeFreezableLiquidatorProxy</a></td><td><a href="https://www.oklink.com/xlayer/address/0x11a7E2Ef87B50605606542783876b32667CB6bDE">0x11a7E2Ef87B50605606542783876b32667CB6bDE</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/interest-setters/contracts/LinearStepFunctionInterestSetter.sol">LinearStepFunctionInterestSetter</a></td><td>Various (depends on configuration)</td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OkxPriceOracleV3.sol">OkxPriceOracle</a></td><td><a href="https://www.oklink.com/xlayer/address/0xcb1b98acAec1700Dc268eAF01d1f98b67A2aF30D">0xcb1b98acAec1700Dc268eAF01d1f98b67A2aF30D</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/OracleAggregatorV2.sol">OracleAggregator</a></td><td><a href="https://www.oklink.com/xlayer/address/0x6727fe07ff5dCE46F34D20FB1f9D62EDDA73cFdc">0x6727fe07ff5dCE46F34D20FB1f9D62EDDA73cFdc</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/packages/oracles/contracts/RedstonePriceOracleV3.sol">RedstonePriceOracle</a></td><td><a href="https://www.oklink.com/xlayer/address/0xe09f85B284C177c8325c5cCAeaE30a14494CDD45">0xe09f85B284C177c8325c5cCAeaE30a14494CDD45</a></td></tr></tbody></table>


# Module - oARB Liquidity Mining

The oARB Liquidity Mining Program was created for the Arbitrum STIP grant program

## Dolomite Margin - Module

<div align="left"><figure><img src="https://img.shields.io/badge/GitHub-dolomite--exchange%2Fdolomite--margin--modules-lightgrey" alt=""><figcaption></figcaption></figure></div>

### Arbitrum One

<table><thead><tr><th>Contract Name</th><th width="249.33333333333331">Description</th><th>Address</th></tr></thead><tbody><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/tree/master/contracts/external/liquidityMining/RewardsDistributor.sol">oARBRewardsDistributor</a></td><td>Merkle distributor for claiming oARB rewards</td><td><a href="https://arbiscan.io/address/0x66Cd7D0cC677F42f6662622C60A5E60EF573db67">0x66Cd7D0cC677F42f6662622C60A5E60EF573db67</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/tree/master/contracts/external/liquidityMining/VesterExploder.sol">VesterExploder</a></td><td>The detonation contract used to expire vests that go past maturity</td><td><a href="https://arbiscan.io/address/0x2c9052bB57898C3C2c6239F3d69567FC5962CB62">0x2c9052bB57898C3C2c6239F3d69567FC5962CB62</a></td></tr><tr><td><a href="https://github.com/dolomite-exchange/dolomite-margin-modules/tree/master/contracts/external/liquidityMining/VesterProxy.sol">VesterProxy</a></td><td>Vesting contract for converting oARB to ARB</td><td><a href="https://arbiscan.io/address/0x531bc6e97b65adf8b3683240bd594932cfb63797#code">0x531BC6E97b65adF8B3683240bd594932Cfb63797</a></td></tr></tbody></table>


# Admin Privileges

Understanding how the owners of the Dolomite Margin protocol can effectuate changes is important for disclosing risk.

## Primer

In the initial stages of the protocol, the admin rights are owned by a simple multi signature wallet (Gnosis Safe) that is stood up behind a delayed multi signature wallet (custom-made by the dYdX team). The Gnosis Safe is a 2/3 wallet. Meaning, 2 signers are needed out of the 3 owners to execute a transaction.&#x20;

The delayed multi signature wallet is solely owned by the Gnosis Safe, which means the security and ownership of the delayed multi signature wallet falls back on to the Gnosis Safe. On the other hand, the time delay falls completely on the delayed multi signature wallet; whatever delay is set for the delayed multi signature wallet indiscriminately requires that all transactions sent (except certain whitelisted ones) to it wait the same delay before the transaction can be executed. Meaning, all admin transactions involving the `DolomiteMargin` protocol require that `secondsTimeLocked` amount of time must be waited before the transaction effectuates.

> At the time of launch, the delay on the delayed multi signature wallet is 1 day (86,400 seconds). The intention is to raise it incrementally until the protocol is more battle-tested and ownership of the protocol becomes much more decentralized.

To check the current delay (in case these docs ever go out of sync!) you can convert the `secondsTimeLocked` value from seconds to minutes/hours/days on [Arbiscan](https://arbiscan.io/address/0xE412991Fb026df586C2f2F9EE06ACaD1A34f585B#readContract).

## Special Function Bypass

Certain functions are able to bypass the `secondsTimeLocked` restriction and be executed **immediately**. The reason for having this is it allows the administrators to make quick changes in the event market conditions change whimsically, `DolomiteMargin` is exploited, a bug is uncovered, or some other black swan event occurs. The following table showcases which functions can be bypassed.

<table><thead><tr><th width="372.3333333333333">Function Name</th><th width="163">Method ID</th><th>Can Bypass Timelock?</th></tr></thead><tbody><tr><td><code>ownerSetMarketIsClosing</code></td><td><code>0xef6957d0</code></td><td>TRUE</td></tr><tr><td><code>ownerSetMarketMaxWei</code></td><td><code>0x0cd30a0e</code></td><td>TRUE</td></tr><tr><td><code>ownerSetInterestSetter</code></td><td><code>0x121fb72f</code></td><td>TRUE</td></tr><tr><td><code>GLPWrappedTokenUserVaultFactory::setUserVaultImplementation</code></td><td><code>0x35598a02</code></td><td>TRUE</td></tr></tbody></table>

## Risk Limits <a href="#risk-limits" id="risk-limits"></a>

DolomiteMargin initializes an immutable struct called `RiskLimits` upon deployment that defines that absolute maximum that certain parameters can *ever* be. Meaning, under no possible circumstance can these values change and under no possible circumstance can `RiskParams` (the mutable counterpart of the `RiskLimit` struct) be changed to a value that exceeds a value set in `RiskLimits`. The following values are set in `RiskLimits`:

`uint64 marginRatioMax`

> The highest that the ratio can be for liquidating under-water accounts. Permanently set at `2000000000000000000`, which is equal to 200% collateralization.

`uint64 liquidationSpreadMax`

> The highest that the liquidation rewards can be when a liquidator liquidates an account. Permanently set at `500000000000000000`, which is equal to a 50% reward.

`uint64 earningsRateMax`

> The highest that the supply APR can be for a market, as a proportion of the borrow rate. Meaning, a rate of 100% (1e18) would give suppliers all the interest that borrowers are paying. A rate of 90% would give suppliers 90% of the interest that borrowers pay. Permanently set at `1000000000000000000`, which is equal to 100% of the borrow rate going to suppliers.

`uint64 marginPremiumMax`

> The highest min margin ratio premium that can be applied to a particular market. Meaning, a value of 10% (1e17) would require borrowers to maintain an extra 10% collateral to maintain a healthy margin ratio. This value works by increasing the debt owed and decreasing the supply held for the particular market by this amount, by this the value. Permanently set at `2000000000000000000`, which equals 200%. Meaning, if this value were set for an individual market's `RiskParams` to `2000000000000000000`, and the protocol's minimum collateralization is 115%, that particular market will require a min collateralization of 345% in maintain sufficient collateralization.

`uint64 spreadPremiumMax`

> The highest liquidation reward that can be applied to a particular market. This percentage is applied in addition to the liquidation spread in `RiskParams`. This value has 18 decimals, meaning a value of 1e18 is 100%. It is applied to each market as follows: `liquidationSpread * (1 + spreadPremium)`. This value is permanently set at `2000000000000000000`, which equals 200%.

`uint128 minBorrowedValueMax`

> The highest minimum borrowed value that can be set by the protocol (this is confusingly worded, we know!). This value is permanently set at `100000000000000000000` or $1e-16. Meaning, the minimum borrowed value can never be set beyond `100000000000000000000 / 1e36` dollars.

To verify any of the above values, you can visit [Arbiscan](https://arbiscan.io/address/0x6a76986201E1906eb8d887Bb4Ad74b55888617af#readContract) and click the `Query` button for the function `getRiskLimits`.

## Risk Params <a href="#global-risk-params" id="global-risk-params"></a>

`DolomiteMargin` uses a struct for storing global risk-values called `RiskParams` which is *changeable* by the admin of the protocol (subject to any time delays, of course). Many of these values have a counterpart in `RiskLimits` that enforces limitations on what these numbers can be changed to. These values include the following:

`Decimal.D256 marginRatio`

> The required ratio of over-collateralization. If this value is set at `150000000000000000`, this corresponds with 115% collateralization. This value cannot be set below `liquidationSpread` nor above `marginRatioMax` (which is permanently set at 200%) and has a theoretical lower limit of 0 (100% collateralization).

`Decimal.D256 liquidationSpread`

> The liquidation reward paid from liquidated accounts to liquidators. If this value is set at `50000000000000000` which corresponds with a 5% liquidation reward. This value cannot be set below 0% nor above `marginRatio` or `spreadPremiumMax` (which is permanently set at 200%).

`Decimal.D256 earningsRate`

> The percentage of the borrower's interest fee that is passed to the suppliers. If this value is set at `800000000000000000` which corresponds with 80%. The remaining 20% is paid to the protocol as a fee.

`Monetary.Value minBorrowedValue`

> The minimum borrow value that an account may have. This value is measured in dollars and has 36 decimals of precision. This value is currently set at 0 ($0).

`uint256 accountMaxNumberOfMarketsWithBalances`

> The maximum number of markets a user can have a non-zero balance for in a given account. Recall, an account is defined as a user's address, partitioned by an `index`. If this value is set at 32, a user can have at-most 32 markets with non-zero balances for each sub account (`wallet-index[0]`, `wallet-index[1]` ... `wallet-index[n]`, etc).

***

## Market-Specific Risk Params <a href="#market-risk-params" id="market-risk-params"></a>

The following functions and parameters can be called or changed by the protocol's admin and are subject to the same, universal, time delays as well as any applicable limits defined above.

To verify any of these parameters for a particular market, you can first get the `marketId` from the [Markets](https://docs.dolomite.io/#/protocol?id=markets) section of the docs. Alternatively, you can visit the DolomiteMargin smart contract on [Arbiscan](https://arbiscan.io/address/0x6a76986201E1906eb8d887Bb4Ad74b55888617af#readContract) and get the `marketId` by calling the `getMarketIdByTokenAddress` function, passing in the token address whose market ID you're seeking. Then, pass the `marketId` into the `getMarket` function or into individual market risk-oriented functions like:

* `getMarketIsClosing`
* `getMarketPriceOracle`
* `getMarketInterestSetter`
* `getMarketMarginPremium`
* `getMarketSpreadPremium`&#x20;
* `getMarketMaxSupplyWei`&#x20;
* `getMarketMaxBorrowWei`
* `getMarketMaxWei` (Arbitrum only)
* `getMarketEarningsRateOverride`&#x20;

### Add Market

```solidity
function ownerAddMarket(
    address token,
    IPriceOracle priceOracle,
    IInterestSetter interestSetter,
    Decimal.D256 memory marginPremium,
    Decimal.D256 memory spreadPremium,
    uint256 maxSupplyWei,
    uint256 maxBorrowWei,
    Decimal.D256 memory earningsRateOverride
    bool isClosing
);
```

This function allows a new market to be added to DolomiteMargin. Upon initialization, the token's address cannot be changed. Other values that are initialized and can be changed include `isClosing`, `priceOracle`, `interestSetter`, `marginPremium`, `spreadPremium`, `maxSupplyWei`, `maxBorrowWei`, and `earningsRateOverride`.

`bool isClosing`

> This value defaults to `false`. Setting this value to `true` disallows any *new* borrows from occurring for that market. This value is checked after each interaction with DolomiteMargin settles, meaning funds can still be flash borrowed (as long as they're returned in full), once the interaction settles.

`IPriceOracle priceOracle`

> The contract address of the price oracle for this market. Must conform to the `IPriceOracle` interface. The price this contract returns has `36 - tokenDecimals` decimals. For example, `1000000000000000000000000000000` equals $1.00 for the USDC market, because USDC has 6 decimals.

`IInterestSetter interestSetter`

> Contract address of the interest setter for this market. Must conform to the `IInterestSetter` interface. This contract takes the utilization (the total amount borrowed and the total amount supplied) for a given market and determines the amount of interest paid by borrowers *every second*. Meaning, a value returned by this contract of `325000000` is equivalent to `1.02% APR` (`325000000 * 86400 * 365`). The result has 18 decimals.

`Decimal.D256 marginPremium`

> The multiplier to apply to the global `marginRatio`. This value works by increasing the debt owed and decreasing the supply held for the particular market by `1 + marginPremium`. Meaning, a `marginPremium` of 100000000000000000 (10%) and a marginRatio of `100000000000000000` (110% collateralization) results in that particular market's `marginRatio` equalling `110% * 1.1 == 121%`.

`Decimal.D256 spreadPremium`

> The multiplier to apply to the global `liquidationSpread`. This value works by increasing the `liquidationSpread` by (`Decimal.one + spreadPremium`). Meaning, a `spreadPremium` of `100000000000000000` (10%) and a `liquidationSpread` of `50000000000000000`, results in that particular market's `liquidationSpread` equalling `5% * 1.1 == 5.5%`.

`Types.Wei maxSupplyWei`

> The maximum value that can be deposited into DolomiteMargin for this particular market. This allows the protocol to cap any additional risk that is inferred by allowing borrowing against assets with a lower market capitalization or assets with increased volatility. Setting this value to 0 is analogous to having no limit. This value can never be below 0. This value's number of decimals corresponds with the number of decimals this market's token has.

`Types.Wei maxBorrowWei`

> The maximum value that can be borrowed from DolomiteMargin for this particular market. This allows the protocol to cap any additional risk that is inferred by borrowing this market to take out more debt. Setting this value to 0 is analogous to having no limit. This value can never be below 0. This value's number of decimals corresponds with the number of decimals this market's token has.

`Decimal.D256 earningsRateOverride`

> The percentage of the borrower's interest fee that is passed to the suppliers for this market. Setting this value to 0 is analogous to having no override. This value's number of decimals is always 18.

## Other Admin Functions <a href="#other-admin-functions" id="other-admin-functions"></a>

### Set Global Operator

#### What is an operator?

An operator is an external address that has the same permissions to manipulate an account within `DolomiteMargin` as the owner of the account. Operators are simply addresses and therefore may either be externally-owned Ethereum accounts (EoAs) OR smart contracts. Operators are also able to act as AutoTrader contracts on behalf of the account owner if the operator is a smart contract and implements the `IAutoTrader` interface.

#### What kinds of operators exist?

There are three kinds of operators that `DolomiteMargin` supports:

1. Self operators - analogous to `msg.sender` or the user
2. Local operators - users approve each of them manually, like a token approval
3. Global operators - users do not need to approve them manually, they have permission automatically

#### Why do global operators exist?

Global operators exist to increase the UX of Dolomite for the users. Without them, users would be forced to manually approve a lot of local operator contracts to achieve a competitive and smooth UX.

```solidity
function ownerSetGlobalOperator(
    address operator,
    bool approved
) public;
```

> This function allows the admin to approve or disapprove a smart contract that has the permission to be an operator for all accounts on DolomiteMargin.
>
> A non-exhaustive list of global operators include the [LiquidatorProxyV1](https://arbiscan.io/address/0xDda7d883B19536823ccD6d16F0b14d9ba1FAB581) and [DepositWithdrawalProxy](https://arbiscan.io/address/0xA526B730B96d0ADC11B206560DE19760f12737c4), which exist to simplify the user experience or lower gas costs for Dolomite users by consuming less calldata.

{% hint style="danger" %}
With regard to the safety of user's funds, this function likely poses the largest risk on the system. If a buggy or malicious global operator is ever set, all of the users' funds could be at risk.

Therefore, all global operators must undergo extensive testing and review before being added to the system. Moreover, they should always be stuck behind a time delay to allow users to react to any new global operator contracts being added.
{% endhint %}

### Set Auto Trader Special

```solidity
function ownerSetAutoTraderSpecial(
    address autoTrader,
    bool special
) public;
```

This function sets or unsets an instance of `IAutoTrader` from needing to be called by a global operator. This exists to ensure certain contracts, like `Expiry` can eventually only be called by trusted [Keepers](https://chain.link/keepers) on the Chainlink Oracle network.

### Withdraw Excess Token <a href="#other-miscellaneous-admin-functions" id="other-miscellaneous-admin-functions"></a>

```solidity
function ownerWithdrawExcessTokens(
    uint256 marketId,
    address recipient
) public;
```

This function allows the admin to withdraw an ERC20 token for which there is an associated market. Only excess tokens can be withdrawn. The number of excess tokens is calculated by taking the current number of tokens held in DolomiteMargin, adding the number of tokens owed to DolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by DolomiteMargin.

### Withdraw Unsupported Tokens

```solidity
function ownerWithdrawUnsupportedTokens(
    address token,
    address recipient
) public;
```

This function allows the admin to withdraw an ERC20 token for which there is no associated market. This is analogous to rescuing tokens sent to the protocol by accident.


# Admin Transactions

Admin Transactions are organized in a GitHub repository for you to track and monitor

In an effort to increase transparency, all transactions against that impact the Dolomite Margin protocol are documented in the `safe_transactions` folder of the `deployment` package. For each network, there are numbered transactions that correspond with the `nonce` of the Gnosis Safe transaction.

[GitHub `safe_transactions` Folder](https://github.com/dolomite-exchange/dolomite-margin-modules/tree/master/packages/deployment/src/deploy/safe-transactions)

This setup allows us to dry-run, test, and produce executable JSON that can be ingest by our Safe and manually checked over via hardware wallets for execution.


# Audits & Security

Dolomite splits its smart contract development to two repositories: Core & Modules.

## First, why two repositories?

Dolomite splits its smart contract source code between two repositories for a few reasons:

* The Core repository was originally made by the dYdX team and uses old development practices and an older version of Solidity. We wanted to change as little as possible of the architecture of this repository because it worked exceptionally well and demonstrated its security
* The Core repository is an encapsulation of the core protocol's immutability. Generally, this repository won't change
* Testing in the Core repository revolves around unit tests, whereas the Modules repository enables more comprehensive testing with end-to-end integration testing by forking any live network

## Dolomite Margin - Core

The `Dolomite Margin Core` [smart contracts](https://github.com/dolomite-exchange/dolomite-margin) were audited independently at various points in their lifecycle by [Open Zeppelin](https://www.openzeppelin.com/), Bramah Systems, [SECBIT Labs](https://secbit.io/) and most-recently by [Cyfrin](https://www.cyfrin.io/).

The Cyfrin audit report covers the most recent suite of updates to the smart contracts. The SECBIT audit was conducted prior to launch of Dolomite on Arbitrum One. The Zeppelin Solutions and Bramah Systems audit reports cover the original version of the smart contracts that was created by dYdX (when the protocol was called Solo Margin).

* [**Cyfrin Audit Report**](https://github.com/dolomite-exchange/dolomite-margin/blob/master/docs/Dolomite%20Margin%20-%20Cyfrin%20-%202023-08-23.pdf)
* [**SECBIT Labs Audit Report**](https://github.com/dolomite-exchange/dolomite-margin/blob/master/docs/Dolomite%20Margin%20-%20SECBIT%20-%202021-08-02.pdf)
* [Open Zeppelin **Audit Report**](https://blog.openzeppelin.com/solo-margin-protocol-audit-30ac2aaf6b10)
* [**Bramah Systems Audit Report**](https://github.com/dolomite-exchange/dolomite-margin/blob/master/docs/dYdX%20Audit%20Report%20Bramah%20Systems.pdf)

## Dolomite Margin - Modules

The `DolomiteMargin Modules` [smart contracts](https://github.com/dolomite-exchange/dolomite-margin-modules) are were audited by [Zokyo](https://www.zokyo.io/) and [Guardian Audits](https://guardianaudits.com/).  Please be aware that this repository undergoes active development and the scope (and smart contracts) covered by each audit is different.&#x20;

* [Zokyo Audit Report](https://github.com/dolomite-exchange/dolomite-margin-modules/blob/master/docs/Dolomite%20Protocol%20Modules%20-%20GLP%20%26%20Isolation%20Mode%20Report%20-%20Zokyo%20-%202023-04-19.pdf)
* [Guardian Audits Report](https://github.com/GuardianAudits/Audits/blob/main/Dolomite/2024-01-11_Dolomite.pdf)
* [Cyfrin Audit Report](https://github.com/Cyfrin/cyfrin-audit-reports/blob/main/reports/2025-04-24-cyfrin-dolomite-POLVaults-v2.0.pdf)

This repository will contain most active development, since it's where the protocol performs its integrations and creates new features that sit atop the Core's immutable infrastructure.

## Code Coverage <a href="#code-coverage" id="code-coverage"></a>

All production smart contracts are extremely well-tested and have 100% line, statement, and branch coverage.

* [Coverage Report](https://coveralls.io/github/dolomite-exchange/dolomite-margin?branch=master) for `Dolomite Margin - Core`
* [Coverage Report](https://coveralls.io/github/dolomite-exchange/dolomite-margin-modules?branch=master) for `Dolomite Margin - Modules`


# Chainalysis Crypto Incident Response

Dolomite is protected by Chainalysis Crypto Incident Response (CIR) to allow for swift action in worst case scenarios.

In the worst-case scenario where the Dolomite Protocol is exploited in some way, Chainalysis CIR will be there to allow for early detection and rapid response. They are a leader in their field and provide the highest level of security and protection.

### What is Chainalysis?

Chainalysis is the "blockchain data platform" - they provide data, software, services, and research to government agencies, exchanges, financial institutions, and insurance and cybersecurity companies in over 70 countries. Their data powers investigation, compliance, and market intelligence software that has been used to solve some of the world’s most high-profile criminal cases and grows consumer access to cryptocurrency safely. Backed by Accel, Addition, Benchmark, Coatue, GIC, Paradigm, Ribbit, and other leading firms in venture capital, Chainalysis builds trust in blockchains to promote more financial freedom with less risk. For more information, visit [www.chainalysis.com](http://www.chainalysis.com/).

### What is Chainalysis CIR?

Chainalysis Crypto Incident Response Service is a rapid response retainer service to help cryptocurrency businesses and large organizations that are high-risk targets for a cyber attack or unauthorized network intrusion that involves cryptocurrency theft or demand. When an incident occurs, their team of experts is ready to act quickly and work side-by-side with Dolomite to minimize losses and recover cryptocurrency funds. For more information, visit <https://www.chainalysis.com/crypto-incident-response/>&#x20;

When Dolomite alerts Chainalysis to an incident, their investigative team immediately begins tracking the stolen crypto. Chainalysis investigators have the industry’s most comprehensive, authoritative, and verifiable crypto transaction dataset — one trusted by global regulators and law enforcement for digital asset recovery and prosecution — at their fingertips to track down clients’ stolen funds. The service includes:

* Advanced tracing capabilities that combat obfuscation techniques
* An extensive portfolio of advanced and time-sensitive cases investigated successfully, plus a history of expert witness testimony
* Support from a wide range of crypto professionals with high profile case experience, including threat and threat actor subject matter experts, world-class investigators, and data scientists

Since its founding, Chainalysis has helped crypto organizations recover $11 billion in stolen crypto. Following the launch of CIR, they've played a role in retrieving roughly $50 million, and 80% of their customers have recovered more in stolen funds than they invested in Chainalysis services.

### How does it work?

When an incident happens and cryptocurrency funds are either demanded or stolen, the organization contacts the 24/7 Chainalysis Incident Response hotline. From there, Chainalysis assigns a dedicated team of experts in time zones around the world with advanced investigative capabilities and works around the clock with the victim organization. Chainalysis also helps liaise with law enforcement and asset recovery counsel if needed.

Their investigators have worked with private and public sector organizations on hundreds of incidents, helping to solve some of the most high-profile cyber criminal cases. Once an incident report comes in, Chainalysis immediately begins tracing the stolen cryptocurrency funds, and labels any addresses holding them as associated with crypto theft so that all [Reactor](https://www.chainalysis.com/chainalysis-reactor/) and [KYT](https://www.chainalysis.com/chainalysis-kyt/) users see the funds are illicit in nature and bad actors have a more difficult time cashing out the victim’s money.

We're happy to know that Chainalysis is there to take swift action in the case that a hacker gets access to assets on Dolomite, and through that swift action they provide Dolomite with the highest chance of recovering lost funds.


# Bug Bounty

The disclosure of security vulnerabilities helps us ensure the security of our users.

**How to report a security vulnerability?**

If you believe you’ve found a security vulnerability in one of our contracts or platforms, send it to us by emailing <security@dolomite.io>. Please include the following details with your report:

* A description of the location and potential impact of the vulnerability.
* A detailed description of the steps required to reproduce the vulnerability.

**Scope**

Any vulnerability not previously disclosed by us or our independent auditors in their reports.

**Guidelines**

We require that all reporters:

* Make every effort to avoid privacy violations, degradation of user experience, disruption to production systems, pilfering or permanent loss of any assets, and destruction of data during security testing.
* Use the identified communication channels to report vulnerability information to us.
* Keep information about any vulnerabilities you’ve discovered confidential between yourself and Dolomite until we’ve had 30 days to resolve the issue.

If you follow these guidelines when reporting an issue to us, we commit to:

* Not pursue or support any legal action related to your findings.
* Work with you to understand and resolve the issue quickly (including an initial confirmation of your report within 72 hours of submission).
* Grant a monetary reward based on the [OWASP](https://owasp.org/) risk assessment methodology.

<figure><img src="/files/Vh0j9yi5QW1VnqA9hVBu" alt=""><figcaption><p>The OWASP risk assessment chart</p></figcaption></figure>


# FAQ

This page is still a work in process. Pardon the incompleteness :pray:

## Does Dolomite have a native token?

Dolomite has announced its token, DOLO, which will launch shortly after the launch of Berachain. You can read all the details here: <https://medium.com/dolomite-official/dolomite-unveils-dolo-on-berachain-da5d87226639>

## What makes Dolomite unique?

Dolomite is built on an extremely modular architecture that enables deep capital efficiency for users and broad token support. Dolomite is the first money market platform to be able to list thousands of assets in its central pooling design and enable users to retain full control over the assets they deposit. You can learn more about Dolomite's architecture on [this page](/) of our docs.

For the first time, users can collect rewards, vote, vest, and do much more with their tokens while they borrow against them. Users do not have to worry about relinquishing control over unique features that their tokens enable when they use Dolomite.

Dolomite was also built to solve some of the toughest problems in DeFi that face lending protocols today - mainly economic risk, technical risk with composing multiple DeFi protocols together, and liquidity crunches. Through Dolomite's innovative [Isolation Mode](/risk-management#isolation-mode) and the features it enables, Dolomite can partition risk in ways other protocols have not yet. Moreover, Dolomite can prevent liquidity crunches by increasing liquidity for virtual liquidity trading which will allow users to enter or exit positions without needing to completely exit Dolomite's ecosystem. This will work exceptionally well during liquidity crunches (like the USDC de-peg event of March of 2023), when access to ERC20 liquidity dries up.


# Media Kit

<div align="left"><figure><img src="/files/9hWJjbIgZbk4q50gZ1MM" alt=""><figcaption></figcaption></figure></div>

### Name and logo white - [SVG](https://dolomite.io/logos/dolomite-logo-white.svg)  |  [PNG](https://dolomite.io/logos/dolomite-logo-white.png)

<div align="left"><figure><img src="/files/opjbkTGXTWaC3AM0dBrF" alt=""><figcaption></figcaption></figure></div>

### Name and logo black - [SVG](https://dolomite.io/logos/dolomite-logo-dark.svg)  |  [PNG](https://dolomite.io/logos/dolomite-logo-dark.png)

<div align="left"><figure><img src="/files/y7zwDfgsfF03HF3mnsdp" alt="" width="188"><figcaption></figcaption></figure></div>

### Logo white - [SVG](https://dolomite.io/logos/dolomite-symbol-white.svg)  |  [PNG](https://dolomite.io/logos/dolomite-symbol-white.png)

<div align="left"><figure><img src="/files/4xazcN4PTOFNCY6DhNRq" alt="" width="188"><figcaption></figcaption></figure></div>

### Logo black - [SVG](https://dolomite.io/logos/dolomite-symbol-dark.svg)  |  [PNG](https://dolomite.io/logos/dolomite-symbol-dark.png)

<div align="left"><figure><img src="/files/WpAH4jIpRSuBJsZzzl9H" alt="" width="128"><figcaption></figcaption></figure></div>

### veDOLO logo white - [SVG](https://dolomite.io/logos/dolomite-vedolo-white.svg)  |  [PNG](https://dolomite.io/logos/dolomite-vedolo-white.png)

<div align="left"><figure><img src="/files/SAcJ9KNcSgUumoHuwh9G" alt="" width="128"><figcaption></figcaption></figure></div>

### veDOLO logo black - [SVG](https://dolomite.io/logos/dolomite-vedolo-dark.svg)  |  [PNG](https://dolomite.io/logos/dolomite-vedolo-dark.png)

<div align="left"><figure><img src="/files/9iOpBjzCKtKQtF3OZP4J" alt="" width="128"><figcaption></figcaption></figure></div>

### Logo with background - [SVG](https://dolomite.io/logos/dolomite-dolo-token-logo-dark.svg)  |  [PNG](https://dolomite.io/logos/dolomite-dolo-token-logo-dark.png)

<div align="left"><figure><img src="/files/RwzBQ65X0vQRhUGNkrbO" alt="" width="188"><figcaption></figcaption></figure></div>

### veDOLO logo with background - [SVG](https://dolomite.io/logos/dolomite-vedolo-token-logo-dark.svg)  |  [PNG](https://dolomite.io/logos/dolomite-vedolo-token-logo-dark.png)


# Deprecated

This page contains links to deprecated parts of Dolomite that are no longer in use


# oARB Incentives Program

Details on how to earn and use oARB rewards

Thanks to the Arbitrum community's vote, we were one of the projects selected to receive an ARB grant as part of the STIP. The grant will be used to incentivize liquidity growth on Dolomite so the protocol can underwrite loans for larger positions, enabling more hedging and looping strategies.

[Read the full grant proposal here for all the details](https://forum.arbitrum.foundation/t/dolomite-final-stip-round-1/16818)

{% hint style="info" %}
You can manage your rewards from the new Rewards page at <https://app.dolomite.io/rewards>
{% endhint %}

{% hint style="info" %}
The oARB contract address is `0xCBED801b4162bf2A19B06968663438b5165A6A93`
{% endhint %}

### What is the oARB Incentives Program?

Thanks to the Arbitrum community vote, Dolomite has received 500,000 ARB to be used to incentivize TVL growth on Dolomite. This is being done by rewarding users who hold USDC, ETH, WBTC, ARB, LINK, or GMX on Dolomite with *oARB* tokens. These tokens can be used to get ARB tokens at a discount from the market rate. Read below to learn how to earn, claim, and vest oARB.

### How to Earn oARB

<figure><img src="/files/Q483pJ90bivzjW9thPiB" alt="" width="375"><figcaption></figcaption></figure>

Earning oARB is very straightforward. Simply, holding USDC, ETH, WBTC, ARB, LINK, or wUSDM on Dolomite will earn you oARB. To begin earning, deposit one or more of these assets on the Dolomite [Balances page](https://app.dolomite.io/balances). If you already have any of these assets on Dolomite, you have already begun earning oARB! Alternatively, you can borrow any of these assets using the [Borrow page](https://app.dolomite.io/borrow), which will add the asset to your [Dolomite Balance](/dolomite-balances).

{% hint style="info" %}
You will earn rewards regardless of where your assets are on Dolomite. They can be in your available balance, added to a Dolomite liquidity pool, or acting as collateral in a Dolomite borrow position, and you will still earn oARB.
{% endhint %}

You can track your total balance deposited to Dolomite of each of the assets on the [Rewards page](https://app.dolomite.io/rewards) in the `Earn oARB` panel (shown in the image above). That balance reflects the total amount you hold on Dolomite, across all borrow positions, available balance, and liquidity pools.

The amount of oARB you earn will depend on several factors. Every week 40,000 oARB is distributed based on the weights shown in the `Earn oARB` panel, with 43.75% going to USDC liquidity providers, 22% to ETH providers, and so on. The oARB for each asset is then distributed among users based on the amount of liquidity that they provide. For example, a user holding half of the USDC on Dolomite would receive half of the oARB going to USDC liquidity providers.

The APR shown for each asset is based on the expected return a user would receive if they were to take the oARB they earned and vest it for the maximum period of *40 weeks*, or *26 weeks* for users:

* Above Level 4

or

* Have $100,000 in assets deposited on Dolomite.

### How to Claim oARB

<figure><img src="/files/VLFvo5YU3AW4Vi0gYvpg" alt="" width="428"><figcaption></figcaption></figure>

Claiming oARB can be done on the [Rewards page](https://app.dolomite.io/rewards) once per week. oARB rewards accrue over the course of a week, and on Thursday the amount of oARB that you've earned is shown on the `Claim oARB` panel on the right under "Claimable". To claim available oARB, click the green `Claim` button and sign the transaction from your wallet. This will add any claimable oARB to your oARB balance, which is displayed on the left side of the panel under `Your oARB Balance`.

{% hint style="info" %}
**Please note that your claimable oARB balance only updates once per week on Thursday.** If you've just added assets to Dolomite and don't see any oARB accruing, just wait until Thursday and it will update to display the amount you've earned, at which point you can claim it. An announcement will go out on Discord when the distribution happens, generally early afternoon East Coast US time.
{% endhint %}

{% hint style="warning" %}
There is a minimum of at least 0.01 oARB for claiming. If you did not earn at least 0.01 oARB for the given week, your claim amount will be shown as 0.
{% endhint %}

### How to Vest oARB

<figure><img src="/files/WmxjTjHd2INuYDzaxwfe" alt="" width="387"><figcaption><p><em>Note: This wallet is Level 4 and received the accelerated vesting.</em></p></figcaption></figure>

Once you have claimed oARB and have an oARB balance, you can begin vesting. This can be done from the `Vest oARB` panel on the [Rewards page](https://app.dolomite.io/rewards). Vesting turns your oARB into discounted ARB, allowing you to get ARB at a price cheaper than market rate.

To vest, go to the Rewards page and find the `Vest oARB` panel. Enter the amount of oARB you would like to vest into the input field. You will need to pair your oARB with ARB from your Dolomite Balance. So for example, if you wanted to vest 100 oARB, you would need to hold 100 ARB that you can pair with it for the duration of the vesting period. Until vesting completes, the ARB will be locked along with the oARB. After vesting, the paired ARB will be returned to your Dolomite Balance.

After entering an amount of oARB, select your vesting discount using the slider below. The size of the discount is based on how long you choose to vest for. Moving the vesting slider to the right increases the amount of time to vest, along with the discount you are able to purchase ARB with. The slider increments in 2.5% per week at a time for users below level 4, and 2.5% per 0.66 weeks for users at or above level 4 or that hold at least $100,000 in their Dolomite Balance. The minimum vest time is 1 week for a 2.5% discount *(4.5 days for a Level 4+ user* **or** *$100,000+ in their Dolomite Balance)* and the maximum being 40 weeks for a 100% discount on ARB *(26.66 weeks for a Level 4+ User* **or** *$100,000+ in their Dolomite Balance)*. The discount is applied when vesting is complete and you `execute` your vest, using the market rate at that time.

{% hint style="info" %}
**Community XP with oARB Incentives:**\
Dolomite offers accelerated vesting for Dolomite Users above the Level 4 in Dolomite's [Community XP Program](https://docs.dolomite.io/community-xp), with 50% faster vesting. If a user is Level 4+, the *Level 4+* box will be highlighted, and the discount will be factored in below, as shown in the image above.&#x20;

*Resources:*

* [Community XP Program Information](https://docs.dolomite.io/community-xp)
* [A Guide to Level 4](https://docs.dolomite.io/campaign-guides/guide-to-level-4)
  {% endhint %}

{% hint style="info" %}
**High Value Depositors:**\
Many users holding larger balances, as well as institutions, may find themselves unable to complete XP campaigns to get to level 4, despite being loyal users of Dolomite. The $100k balance exception was made to account for this, so that those users and institutions can fully utilize the oARB Rewards Program.
{% endhint %}

For example, if you were to begin vesting 100 oARB on June 26th, and chose to vest for 40 weeks (max), you would be able to execute your vest starting on the following April 2nd, at which point you would be able to buy 100 ARB at a 100% discount, receiving the ARB for free.

After you have entered an amount of oARB and selected a vesting discount via the slider, click the `Vest` button. This will bring up a panel that will provide a summary of your vest. Review the information carefully and then click submit, and approve the transaction from your wallet. This will begin vesting your oARB.

{% hint style="info" %}
It is recommended you claim and vest regularly, as there is a limited amount of ARB available in this program and it is first come first served at the vesting step. You can see the amount of ARB remaining in the rewards pool in the "Vest oARB" panel. This pool is topped up every two weeks. You will only be able to begin vesting as long as there is enough ARB remaining in that pool. Once you begin vesting, ARB will be allocated for your vest, regardless of the vesting lockup period, so you will always be able to execute any vest you begin.
{% endhint %}

### How to Execute (Claim) Vested oARB

<figure><img src="/files/2CrhT7c1zilmBOraiDnk" alt="" width="375"><figcaption></figcaption></figure>

You can see oARB that you have currently vesting in the `Currently Vesting` section of the [Rewards page](https://app.dolomite.io/rewards). Each vest shows the amount of oARB being vested, the discount that will be received, and the amount of time remaining until the vest can be executed.

When the vesting period has completed, you can execute your vest. You can do so by clicking the `Execute` button for the completed vest. Doing so will bring up an Execution Summary, shown below.

<figure><img src="/files/R7pbQoxcthCrEKQ04Sov" alt="" width="375"><figcaption><p>Note: This is the previous iteration of oARB Incentives, it would take 8 weeks for a 20% discount.</p></figcaption></figure>

The execution summary shows what will be sent when you execute, which will be the Vesting NFT for that specific vest and the amount of ETH that it takes to purchase the vested ARB at the discounted price. The discount is based on the market price at the time of execution. Details of the cost and discount are displayed in the execution summary. The ETH to complete the transaction will need to be in your [Dolomite Balance](/dolomite-balances) in order to execute the vest.

The execution summary also shows what you will receive, which is the ARB that you locked up when you began vesting as well as an equivalent amount of ARB that has been vested from oARB and is being purchased at a discounted rate. After execution, these will be added to your Dolomite Balance and can be withdrawn to your wallet if you wish, or held on Dolomite to earn more oARB.

To execute your vest, click the `Execute` button on the execution summary panel and approve the transaction from your wallet. When the transaction completes, the ETH will be removed from your Dolomite Balance, the ARB will be added to your Dolomite Balance, and the vest will be shown in a `Completed Vesting` section below any active vests.

### Why Was the Program Designed This Way?

This rewards program was designed specifically to distribute ARB while avoiding mercenary ARB farming that is harmful to the Arbitrum ecosystem and ARB market, and to instead reward users who are committed to the long term health of ARB. We believe that Dolomite's growth shouldn't come at the expense of ARB. Pairing oARB with ARB during the vesting period and using a discounted ARB model aligns the reward incentives with the long term health of the ARB market and Arbitrum ecosystem while providing incentives to users who help Dolomite grow in TVL.

We're excited for you to try out this program and start earning ARB rewards!


# Minerals

A completed program that recognized loyal liquidity providers. Minerals collected during the program can be used for the DOLO Options Airdrop.

{% hint style="warning" %}
The Minerals program ended Thursday January 10th at 0:00 UTC:

* The deadline to claim your Minerals is January 23rd 2025.
* Only CLAIMED Minerals count for the $DOLO Options Airdrop.
  {% endhint %}

As of January 10th at 0:00 UTC the Minerals Program has ended, making way for a new era of recognizing the loyal liquidity providers supporting Dolomite.&#x20;

Minerals recognized the loyalty of providing liquidity on Dolomite throughout its program lifetime. Liquidity providers on Dolomite dynamically earned Minerals the longer they provided liquidity. With these Minerals, liquidity providers received XP rewards and competed against others on the Minerals Leaderboard. Now those minerals can be used for the Dolomite Options Airdrop.

Moving forward, rewards for providing liquidity will take the form of oDOLO. Similar to Minerals, oDOLO rewards users that hold select assets within their Dolomite Balance or as collateral within Borrow Positions.&#x20;

{% hint style="info" %}
Read more about oDOLO and how it works within the oDOLO documentation.&#x20;
{% endhint %}

### Rewarding Participants of Minerals

Dolomite is providing $DOLO Call Options to retroactively recognize the loyalty and commitment of Minerals program participants at the $DOLO Token Generation Event.

* **Allocation**: 10% of the DOLO supply is allocated to Minerals claimers as call options. Individual allocation is proportional to the Minerals held.&#x20;
* **Purchase Price**: Minerals holders can buy DOLO at $0.045 per token, representing a $45M Fully Diluted Valuation (FDV). This is **$15M below** the last capital raise valuation.
* **Exercise Window**: Minerals participants will have 6 months exercise their options— which can be done in whole, or in parts.&#x20;

The Dolomite DAO sells these options to bootstrap initial protocol-owned liquidity, while also supports long-term ecosystem engagement.&#x20;

### Minerals Program \[ENDED]

The Minerals program has ended as of January 10th, 2025, however if you are interested in the no-longer active program, the following section will outline how it worked.

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

### What are Minerals?

Minerals are non-transferrable ERC-20 tokens that can be collected weekly as part of Dolomite's Minerals loyalty program. The collectable amount depends on the volume of qualifying assets you provide as liquidity on Dolomite. Minerals hold no value and can't be traded. Accumulating minerals allows you to hit various [milestones](/community-xp) to earn XP, and allows you to compete with other Dolomite users by trying to place higher on the Minerals leaderboard.
{% endtab %}

{% tab title="Earning Minerals" %}

### How to Earn Minerals

Minerals can be accrued on the following networks:

{% tabs %}
{% tab title="Arbitrum" %}
Minerals are earned by providing USDC, ETH, and WBTC liquidity to Dolomite. You will earn minerals if these assets are deposited to your [Dolomite Balance](/dolomite-balances) or if you're using them as collateral in a [borrow position](/guide/borrow).

* USDC earns you 1 mineral per USDC per week held on Dolomite
* ETH earns you 5,000 minerals per ETH per week held on Dolomite
* WBTC earns you 75,000 minerals per WBTC per week held on Dolomite

At the end of the week, minerals you earned from that week are multiplied by your multiplier and become available to be collected.
{% endtab %}

{% tab title="Mantle" %}
Minerals are earned by providing USDT, MNT, mETH and ETH liquidity to Dolomite. You will earn minerals if these assets are deposited to your [Dolomite Balance](/dolomite-balances) or if you're using them as collateral in a [borrow position](/guide/borrow).

* USDT earns you 1 mineral per USDC per week held on Dolomite
* MNT earns you 1.25 minerals per MNT per week held on Dolomite
* mETH earns you 2,500 minerals per mETH per week held on Dolomite
* ETH earns you 5,000 minerals per ETH per week held on Dolomite

At the end of the week, minerals you earned from that week are multiplied by your multiplier and become available to be collected. Mantle currently multiplies your Multiplier by 2.
{% endtab %}

{% tab title="X Layer" %}
Minerals are earned by providing USDT, ETH, and WBTC liquidity to Dolomite. You will earn minerals if these assets are deposited to your [Dolomite Balance](/dolomite-balances) or if you're using them as collateral in a [borrow position](/guide/borrow).

* USDT earns you 1 mineral per USDC per week held on Dolomite
* ETH earns you 5,000 minerals per ETH per week held on Dolomite
* WBTC earns you 75,000 minerals per WBTC per week held on Dolomite

At the end of the week, minerals you earned from that week are multiplied by your multiplier and become available to be collected.
{% endtab %}
{% endtabs %}

{% hint style="success" %}
**Mantle's Minerals Multiplier was boosted 2x.**
{% endhint %}

{% hint style="info" %}
**Weeks roll over on Thursdays at 00:00:00 UTC**
{% endhint %}
{% endtab %}

{% tab title="Multiplier" %}

### Minerals Multiplier

Your multiplier starts at 1x, and at the end of your first week you can collect the same number of minerals that you earned that week. For each following week, as long as you earn at least as many minerals as the week before (pre-multiplier), you keep your multiplier and it increases by 0.5x, to a maximum of 5x. If you don't earn at least as many minerals as the week before, you lose your multiplier and your earnings for that week don't receive any multiplication.

So for example, let's say you deposit 5,000 USDC to Dolomite:

**Week 1 -** At the end of the first week, you'll have earned 5,000 minerals, and can add 5,000 minerals to your collection. Your multiplier increases to 1.5x.

**Week 2 -** At the end of the second week, you'll have earned another 5,000 minerals, and with your 1.5x multiplier you'll be able to collect 7,500 minerals. Your multiplier increases to 2x.

**Week 3 -** Say you want to change your holdings, so you swap that 5,000 USDC to ETH, leaving 1 ETH on Dolomite and withdrawing the rest. Because 1 ETH earns 5,000 minerals per week, at the end of the week you'll still have earned 5,000 minerals, so you'll retain your multiplier. With your multiplier, you'll be able to collect 10,000 minerals, and your multiplier increases to 2.5x.

**Week 4 -** Say you withdraw some ETH from Dolomite, leaving only 0.5 ETH. At the end of the week, you'll have earned only around 2,500 minerals (if you withdrew right at the start of the week). Because you fell short of the minerals earned the previous week, you'll lose your multiplier and go back down to 1x. With the loss of your multiplier, you'll have only earned 2,500 minerals for the week.

{% hint style="success" %}
Of course, over those 4 weeks you would have very likely earned interest on your asset, earning you ever more minerals as your deposit grew!
{% endhint %}
{% endtab %}

{% tab title="Minerals Page" %}

### The Minerals Page

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

The Minerals page allows you to track the amount of Minerals you've earned and collected. Here's a breakdown of the information displayed:

**Total Minerals Collected -** At the top of the page you can see your total minerals collected. This number doesn't include the minerals that you've earned during the current week. Once a week has completed, the minerals earned during that week become available to be collected, and once collected they are added to your total shown at the top of the page.

**Rank -** At the top of the page you can see how your mineral collection ranks against other Dolomite users. Collect more minerals to climb the leaderboard. You can see the full leaderboard at the bottom of the page.

**Multiplier -** As long as you maintain the same amount of liquidity on Dolomite, you will keep your multiplier and increase it every week (to a maximum of 5x). The amount of minerals you earn during the week will be multiplied by your multiplier when they become collectable. So if you earn 1,000 minerals over the course of a week and have a 2.5x multiplier, at the end of the week you will be able to collect 2,500 minerals to add to your collection.

**Balances -** Below your total minerals collected you can see your USDC and ETH balances. USDC and ETH borrowing is at the core of many strategies being performed on Dolomite, and as such are the two assets that earn you minerals. Your USDC, ETH and WBTC balances shown here reflect USDC, ETH and WBTC in your [Dolomite Balance](/dolomite-balances) as well as any qualifying assets you hold as collateral in your [Borrow Positions](/guide/borrow).

**USDC Balance -** USDC held on Dolomite earns you 1 mineral per USDC per full week. So 100 USDC on Dolomite for a whole week earns you 100 minerals at the end of the week. If you only have that 100 USDC on Dolomite for half a week, you earn 50 minerals.

**ETH Balance** **-** ETH held on Dolomite earns you 5,000 minerals per ETH per full week. So 1 ETH on Dolomite for a whole week earns you 5,000 minerals at the end of the week. If you only have that 1 ETH on Dolomite for half a week, you earn 2,500 minerals.

**WBTC Balance** **-** WBTC held on Dolomite earns you 75,000 minerals per WBTC per full week. So 1 WBTC on Dolomite for a whole week earns you 75,000 minerals at the end of the week. If you only have that 1 WBTC on Dolomite for half a week, you earn 37,500 minerals.

**Minerals earned this week -** Here you can see the minerals you've earned so far this week. This number will steadily increase throughout the week, and reset back to zero once a week on Thursday when the amount becomes collectable and the new week begins.

**On track to earn this week -** This is an estimate of how many minerals you'll earn this week (before applying your multiplier), extrapolating forward from the balances of USDC, ETH and WBTC you hold and the amount of minerals you've earned so far this week.

**Amount that must be earned to retain multiplier -** This is the amount of minerals that you earned last week (before your multiplier was applied). In order to retain and increase your multiplier, you must earn at least this many minerals by the end of the current week. The simplest way to do so is to just keep the current amounts of USDC, ETH, and WBTC you held from the previous week, however you are free to change the assets and amounts you hold as long as you still reach the same number of points by the end of the week.

**On track to earn this week with multiplier -** This is an estimate of how many minerals you'll earn this week after your multiplier is applied to that amount. When the week ends, this is approximately the number of minerals that will become available for collecting.

**Earned minerals available to be collected -** At the end of each week the minerals you earned from that week become available to be collected, and are added to the number here. Clicking "Collect" will prompt you to submit a transaction which will add those minerals to your collection. You are free to wait several weeks before collecting if you wish, and the number shown here will just increase as the minerals you earn each week become available to be collected.

### Minerals Milestone

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

The [Minerals Milestone](https://app.dolomite.io/achievements) currently aggregates or combines all Minerals earned across all chains. By achieving a milestone *(i.e. 1,000, 100,000, 5M and 50 M)*, you earn an amount of [Dolomite Community XP](https://docs.dolomite.io/community-xp), which can be claimed by clicking on the green XP text *(i.e. 10XP)* on the progress bar.&#x20;
{% endtab %}
{% endtabs %}


# Dolomite Margin - Overview

An overview of Dolomite's smart contract architecture.

[![GitHub](https://img.shields.io/badge/GitHub-dolomite--exchange%2Fdolomite--margin-lightgrey)](https://github.com/dolomite-exchange/dolomite-margin)[![GitHub](https://camo.githubusercontent.com/5dceaa06a5fa717da42e823e815c8a0b3a96310bc412c471d2d95ca4648707fe/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4769744875622d646f6c6f6d6974652d2d65786368616e6765253246646f6c6f6d6974652d2d6d617267696e2d2d6d6f64756c65732d6c6967687467726579)](https://github.com/dolomite-exchange/dolomite-margin-modules)

The Dolomite Margin protocol (A.K.A. `Dolomite Margin`) consists of smart contracts that run on various networks. These contracts support margin trading, borrowing, and lending.

Dolomite Margin is used by [app.dolomite.io](https://app.dolomite.io/) and [markets.worldlibertyfinancial.com](https://markets.worldlibertyfinancial.com/).

Dolomite was built to be as modular as possible while preserving the ethos of DeFi with immutable smart contracts. This is well exemplified below with Dolomite's architecture diagram:

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

A more in-depth explanation of the above diagram can be seen on the home page of the docs [here](/).


# Dolomite Margin - Glossary

To understand how Dolomite Margin works, it's essential to understand the following glossary of terms, which makes up its architecture.

## Accounts <a href="#accounts" id="accounts"></a>

DolomiteMargin is Account based. Each Account is referenced by its owner wallet address and an account number unique to that owner address. Accounts have balances on each asset supported by DolomiteMargin, which can be either positive (indicating a net supply of the asset) or negative (indicating a net borrow of an asset). Accounts must maintain a certain level of collateralization, or they will be liquidated.

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}
```

#### Example <a href="#example" id="example"></a>

Wallet address `0x6b5Bb4E60821eCE7363CaFf836Be1A4f9e3559B3` has the following balances in its account number `123456`:

* ETH: 1,000
* DAI: -10,000
* USDC: -5,000

This account is borrowing 10,000 DAI and 5,000 USDC. These borrows are collateralized by 1,000 ETH. The account will earn interest on ETH and pay interest on DAI and USDC.

## Markets <a href="#markets" id="markets"></a>

Please see the [Markets](/markets) page of the Gitbook.

## Interest <a href="#interest" id="interest"></a>

Interest rates in DolomiteMargin are dynamic and set per Market. Each interest rate is automatically and algorithmically set based on the ratio of `(total borrow) / (total supply)` of that Market. Account balances either continuously earn (if positive) or pay (if negative) interest.

Interest is earned / paid continuously (down to the second). Rates on the protocol are denominated in interest paid per second, in APR.

```solidity
library Interest {
    struct Rate {
        uint256 value;
    }
}
```

* `value`: A `uint256` integer that represents the interest per second, with 18 decimals of precision. Meaning a value of `3,170,979,198` equals \~10% APR. This is exemplified by the math below:\
  `10%` or `100000000000000000` = `100000000000000000 / 365 days per year / 86400 seconds per day`

## Accounting - Wei & Par <a href="#wei-amp-par" id="wei-amp-par"></a>

There are two types of balances amounts on DolomiteMargin: Wei and Par.

### Wei <a href="#wei" id="wei"></a>

Wei refers to the actual token amount of an asset held in or owed by an account. Wei amounts are constantly changing as interest accrues on the balance. For example, if Bob deposits 10 DAI to a DolomiteMargin Account, its Wei balance would initially be 10. The balance would start increasing every second as Bob started earning interest on his DAI.

Likely, most times you will want to use Wei balances when reading data from DolomiteMargin.

```solidity
library Types {
    struct Wei {
        bool sign; // true if positive
        uint256 value;
    }
}
```

* `sign`: A boolean flag that indicates whether the value is positive (`true`) or negative (`false`). This is relevant for tracking whether a value represents a net deposit (positive) or a borrowed amount (negative).
* `value`: A `uint256` integer that holds the magnitude of the value in Wei. This field captures the actual amount of Wei being represented. The number of decimals corresponds with the corresponding token's number of decimals

### Par <a href="#par" id="par"></a>

Par refers to an interest adjusted amount that is static and does not change on the protocol. These are the balances that are actually stored on the protocol smart contracts. The protocol uses the current market index (see below) to transform Par to Wei values.

```solidity
library Types {
    struct Par {
        bool sign; // true if positive
        uint128 value;
    }
}
```

* `sign`: A boolean flag that indicates whether the value is positive (`true`) or negative (`false`). This is relevant for tracking whether a value represents a net deposit (positive) or a borrowed amount (negative).
* `value`: A `uint256` integer that holds the magnitude of the value in Par. This field captures the actual amount of Par being represented. The number of decimals corresponds with the corresponding token's number of decimals

## Amounts <a href="#amounts" id="amounts"></a>

Amounts in DolomiteMargin are denominated by 3 things:

* `value` - the numerical value of the Amount
* `reference` - one of:
  * `AmountReference.Delta` Indicates an amount relative to the existing balance
  * `AmountReference.Target` Indicates an absolute amount
* `denomination` - one of:
  * `AmountDenomination.Wei` Indicates the amount is denominated in the actual units of the token being transferred ( See [Wei](https://docs.dolomite.io/#/protocol?id=wei))
  * `AmountDenomination.Par` Indicates the amount is denominated in "principal". DolomiteMargin uses these types of amounts in its internal accounting, and they do not change over time (See [Par](https://docs.dolomite.io/#/protocol?id=par))

A very important thing to note is that amounts are always relative to how the balance of the Account being Operated on will change, not the amount of the Action occurring. So, for example you'd say `withdraw(-10)`, because when you Withdraw, the balance of the Account will decrease. Attempting to do `withdraw(+10)` will cause DolomiteMargin to throw an error.

## Index <a href="#index" id="index"></a>

Each Market has a global borrow index and supply index. These indexes are used to transform Par <-> Wei values using the formula:

```
Borrow Wei Balance = (Borrow Par Balance) * (Borrow Market Index)
```

and

```
Supply Wei Balance = (Supply Par Balance) * (Supply Market Index)
```

Indexes start at 1 upon the addition of the Market to the protocol. They increase based on how much interest has accrued for that asset. For example upon adding USDC both the borrow index and supply index for USDC were 1. Say over the next month 2% interest accrues to borrowers and 1% interest accrues to lenders (based on the interest rates and time that has passed). After this, the supply index will be 1.01, and the borrow index will be 1.02. These indexes will keep increasing based on interest accrued, forever.

#### Example <a href="#example-1" id="example-1"></a>

Alice deposits 10 DAI to the protocol (10 DAI in Wei). The supply index on DAI is currently 2. Using `Supply Par Balance = (Supply Wei Balance) / (Supply Market Index) = 10 / 2 = 5`, the protocol credits 5 Par balance to Alice's account.

Later, interest has accrued for DAI on the protocol, and now the supply index for DAI is 3. Now, Alice goes to withdraw her DAI. Her DAI Par balance is still 5 (Par does not change over time). Now the protocol calculates `Supply Wei Balance = (Supply Par Balance) * (Supply Market Index) = 5 * 3 = 15`, and sends Alice 15 DAI.

```solidity
library Interest {
    struct Index {
        uint96 borrow;
        uint96 supply;
        uint32 lastUpdate;
    }
}
```

* `borrow`: A `uint96` integer representing the scaled index value for borrowed assets in the market. This value reflects the current state of borrowing activity within the market.
* `supply`: A `uint96` integer representing the scaled index value for supplied assets in the market. This value reflects the current state of asset supply within the market.
* `lastUpdate`: A `uint32` integer representing the timestamp of the last update to the interest index. This timestamp indicates when the index was last modified or recalculated.

## Operators

Operators are entities that perform actions on behalf of an account. They come in three forms:

1. The calling address (`msg.sender`) which interacts with `DolomiteMargin`
2. A local operator, which is set when an Account calls `setOperators(...)` on DolomiteMargin. This is similar to setting a token approval, where an Account specifies which contracts (operators) can interact on their behalf.<br>

   ```solidity
   library Types {
       struct OperatorArg {
           address operator;
           bool trusted;
       }
   }

   function setOperators(
       Types.OperatorArg[] calldata args
   ) external;
   ```
3. A global operator, which is set by the owner of `DolomiteMargin` to automatically allow a contract to interact on behalf of any account on `DolomiteMargin`. Global operators generally exist for two reasons:
   1. To provide liquidation smart contracts for underwater accounts
   2. To offer a smoother UX, since less set up needs to be taken per-user to enable certain features on the platform.

## Actions <a href="#actions" id="actions"></a>

All state changes to an account happen through Actions. Actions can modify the balances of 1 or more Accounts. There is no such thing as a "Borrow" action on DolomiteMargin. Rather, actions can automatically borrow funds if Account balances decrease a user's balance below 0. The following Actions are supported by DolomiteMargin:

### Deposit <a href="#deposit" id="deposit"></a>

Deposit funds into an Account. Funds are moved from the sender or an approved address to DolomiteMargin, and the Account's balance is incremented.

```solidity
struct DepositArgs {
    Types.AssetAmount amount;
    Account.Info account;
    uint256 market;
    address from;
}
```

* `amount`: An instance of the `Types.AssetAmount` struct, which represents the amount of assets to be deposited. If using `Delta` the amount must be positive.
* `account`: An instance of the `Account.Info` struct that identifies the account to which the deposit will be made. This includes the account owner's address and a unique account number. The `sender` must be an approved operator of `account.owner`.
* `market`: A `uint256` integer representing the ID of the market into which the deposit will occur. This market ID specifies the particular asset market to interact with.
* `from`: The address from which the assets for the deposit will be sourced. A token approval must be made from this address to DolomiteMargin

### Withdraw <a href="#withdraw" id="withdraw"></a>

Withdraw funds from an Account. Funds are sent from DolomiteMargin to a specified address and the Account's balance is decremented.

```solidity
struct WithdrawArgs {
    Types.AssetAmount amount;
    Account.Info account;
    uint256 market;
    address to;
}
```

* `amount`: An instance of the `Types.AssetAmount` struct, which represents the amount of assets to be withdrawn. If using `Delta` the amount must be negative.
* `account`: An instance of the `Account.Info` struct that identifies the account from which the withdrawal will be performed. This includes the account owner's address and a unique account number. The `sender` must be an approved operator of `account.owner`.
* `market`: A `uint256` integer representing the ID of the market from which the withdrawal will occur. This market ID specifies the particular asset market to interact with.
* `to`: The address to which the withdrawn assets will be transferred.

### Transfer <a href="#transfer" id="transfer"></a>

Transfer funds internally between two DolomiteMargin accounts. This action can only be invoked by an approved operator for both accounts.

```solidity
struct TransferArgs {
    Types.AssetAmount amount;
    Account.Info accountOne;
    Account.Info accountTwo;
    uint256 market;
}
```

* `amount`: An instance of the `Types.AssetAmount` struct, which represents the amount of assets to be transferred. This includes information about the value and whether it is positive (transfer from accountOne to accountTwo) or negative (transfer from accountTwo to accountOne).
* `accountOne`: An instance of the `Account.Info` struct that identifies the source account from which the assets will be transferred. This includes the account owner's address and a unique account number. The `sender` must be an approved operator of `accountOne.owner`.
* `accountTwo`: An instance of the `Account.Info` struct that identifies the destination account to which the assets will be transferred. This includes the account owner's address and a unique account number. The `sender` must be an approved operator of `accountTwo.owner`.
* `market`: A `uint256` integer representing the ID of the market in which the transfer will occur. This market ID specifies the particular asset market in which the transfer will take place.

### Buy <a href="#buy" id="buy"></a>

Buy an asset on a decentralized exchange using another asset. Uses an [Exchange Wrapper](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/interfaces/IExchangeWrapper.sol) to interact with different decentralized exchanges. Causes the bought asset's balance to go up, and the asset used to do the buy's balance to go down. Example: Buy 1 WETH on Uniswap using DAI.&#x20;

This action is analogous to `swapTokensForExactTokens` on Uniswap. To do `swapExactTokensForTokens`, refer to [Sell](#sell), below.

There are no fees charged by Dolomite for performing this action. Performing a `Buy` action that reduces the user's balance to less than 0 (therefore making the `Buy` a [Flash Loan](/developer-documentation/flash-loans)) do not incur any Dolomite-specific fees. Users are still responsible for paying the fees charged by the external decentralized exchange they are using.

```solidity
struct BuyArgs {
    Types.AssetAmount amount;
    Account.Info account;
    uint256 makerMarket;
    uint256 takerMarket;
    address exchangeWrapper;
    bytes orderData;
}
```

* `amount`: An instance of the `Types.AssetAmount` struct, representing the amount of the asset that the buyer wants to exchange. This amount must resolve to a positive number.
* `account`: An instance of the `Account.Info` struct, identifying the account initiating the Buy Action. This includes the account owner's address and a unique account number. The `sender` must be an approved operator of `account.owner`.
* `makerMarket`: A `uint256` integer indicating the market ID of the `outputMarket`.
* `takerMarket`: A `uint256` integer representing the market ID of the `inputMarket`.
* `exchangeWrapper`: The address of the exchange wrapper contract that facilitates the trade execution. This is the contract responsible for interacting with the external protocol to execute the trade. Must conform to the [`IExchangeWrapper`](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/interfaces/IExchangeWrapper.sol) interface.
* `orderData`: Additional data that might be needed for the trade execution. This can include order parameters specific to the exchange being used.

### Sell <a href="#sell" id="sell"></a>

Sell an asset on a decentralized exchange for another asset. Uses an instance of [IExchangeWrapper](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/interfaces/IExchangeWrapper.sol) to interact with different decentralized exchanges. Causes the sold asset's balance to go down, and the received assets balance to go up. Example: Sell 1 WETH on Uniswap for DAI.

This action is analogous to `swapExactTokensForTokens` on Uniswap.

There are no fees charged by Dolomite for performing this action. Performing a `Sell` action that reduces the user's balance to less than 0 (therefore making the `Sell` a [Flash Loan](/developer-documentation/flash-loans)) do not incur any Dolomite-specific fees. Users are still responsible for paying the fees charged by the external decentralized exchange they are using.

```solidity
struct SellArgs {
    Types.AssetAmount amount;
    Account.Info account;
    uint256 takerMarket;
    uint256 makerMarket;
    address exchangeWrapper;
    bytes orderData;
}
```

* `amount`: An instance of the `Types.AssetAmount` struct, representing the amount of the asset that the buyer wants to exchange. This amount must resolve to a negative number.
* `account`: An instance of the `Account.Info` struct, identifying the account initiating the Sell Action. This includes the account owner's address and a unique account number. The `sender` must be an approved operator of `account.owner`.
* `takerMarket`: A `uint256` integer indicating the market ID of the `inutMarket`.
* `makerMarket`: A `uint256` integer representing the market ID of the `outputMarket`.
* `exchangeWrapper`: The address of the exchange wrapper contract that facilitates the trade execution. This is the contract responsible for interacting with the external protocol to execute the trade. Must conform to the [`IExchangeWrapper`](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/interfaces/IExchangeWrapper.sol) interface.
* `orderData`: Additional data that might be needed for the trade execution. This can include order parameters specific to the exchange being used.

### Trade <a href="#trade" id="trade"></a>

Trade assets with another account on DolomiteMargin internally. No actual tokens are moved, but Account balances are updated. Uses the [`IAutoTrader`](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/interfaces/IAutoTrader.sol) interface, which allows a smart contract to be specified which is called to determine the price of the trade.

The fees charged by Dolomite for performing this action depend on the implementation of the specific `IAutoTrader` contract. For example, the simple `x * y = k` AMM pools used by Dolomite charge a 0.3% fee for trades, which is factored into the trade price. If the instance of IAutoTrader is set to `special` on Dolomite Margin, then the instance of IAutoTrader can only be interacted with via a Global Operator.

```solidity
struct TradeArgs {
    Types.AssetAmount amount;
    Account.Info takerAccount;
    Account.Info makerAccount;
    uint256 inputMarket;
    uint256 outputMarket;
    address autoTrader;
    bytes tradeData;
}
```

* `amount`: An instance of the `Types.AssetAmount` struct, indicating the amount of the asset being traded. Can resolve to a positive or negative number. If using `AssetReference.Target`, it is calculated using the balances of the `makerAccount`.
* `takerAccount`: An instance of the `Account.Info` struct, identifying the account that is initiating the trade as the taker. This includes the account owner's address and a unique account number. The `sender` must be an approved operator of `takerAccount.owner`.
* `makerAccount`: An instance of the `Account.Info` struct, identifying the account that is providing the assets for the trade as the maker. This includes the account owner's address and a unique account number. The `autoTrader` must be an approved operator of `makerAccount.owner`.
* `inputMarket`: A `uint256` integer representing the market ID of the asset being given as input to the trade. This specifies the market where the taker's asset is listed.
* `outputMarket`: A `uint256` integer indicating the market ID of the asset to be received as output from the trade. This specifies the market where the maker's asset is listed.
* `autoTrader`: The address of the auto-trading contract responsible for executing the trade between the taker and maker accounts. Must conform to the [`IAutoTrader`](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/interfaces/IAutoTrader.sol) interface.
* `tradeData`: Additional data that might be required for the trade execution. This can include parameters specific to the auto-trading mechanism being used.

### Call <a href="#call" id="call"></a>

Calls a function specified by the [`ICallee`](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/interfaces/ICallee.sol) interface through the context of an Account. Does not modify Account balances. An example of how this can be used is for setting expiration on the [`Expiry`](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/traders/Expiry.sol) contract.

```solidity
struct CallArgs {
    Account.Info account;
    address callee;
    bytes data;
}
```

* `account`: An instance of the `Account.Info` struct, identifying the account that is initiating the call action. This includes the account owner's address and a unique account number. The `sender` to DolomiteMargin must be an approved operator of `account.owner`.
* `callee`: The address of the smart contract that the call action will be directed to. This contract is the recipient of the function call. Must implement the [`ICallee`](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/protocol/interfaces/ICallee.sol) interface.
* `data`: Additional data that is required for the function call. This can include any arbitrary data needed to execute the call.

### Liquidate <a href="#liquidate" id="liquidate"></a>

Liquidates an undercollateralized Account. Operates on two Accounts: the liquidating Account, and the undercollateralized Account. Does not transfer any tokens, but just internally updates balances of accounts. This action can only be invoked on `DolomiteMargin` through a `Global Operator`. Liquidates at the price specified by the oracle. Example:

Starting Account Balances:

Liquidating Account (L): +100 DAI\
Undercollateralized Account (U): -1 ETH, +140 DAI\
ETH oracle price: $125\
DAI oracle price: $1\
Liquidation spread: 5%

The liquidate action causes 1 ETH to be transferred from L -> U, and `1 ETH * (($125/ETH) / ($1/DAI)) * 1.05 = 131.25 DAI` to be transferred from U -> L. After the liquidation the balances will be:

Liquidating Account (L): +231.25 DAI, -1 ETH\
Undercollateralized Account (U): +8.75 DAI

```solidity
struct LiquidateArgs {
    Types.AssetAmount amount;
    Account.Info solidAccount;
    Account.Info liquidAccount;
    uint256 owedMarket;
    uint256 heldMarket;
}
```

* `amount`: An instance of the `Types.AssetAmount` struct, representing the amount of `owedMarket` that will be repaid on`liquidAccount`. This amount must resolve to a positive number.
* `solidAccount`: An instance of the `Account.Info` struct, identifying the account that is in a healthy (solvent) state and initiating the liquidation action.
* `liquidAccount`: An instance of the `Account.Info` struct, identifying the account that is undercollateralized and subject to being liquidated.
* `owedMarket`: The market ID that corresponds to the market from which the undercollateralized account owes tokens.
* `heldMarket`: The market ID that corresponds to the market in which the solvent account holds tokens that will be used as collateral.

### Vaporize <a href="#vaporize" id="vaporize"></a>

Pulls extra funds from the insurance fund to re-collateralize an underwater account with only negative balances.

```solidity
struct VaporizeArgs {
    Types.AssetAmount amount;
    Account.Info solidAccount;
    Account.Info vaporAccount;
    uint256 owedMarket;
    uint256 heldMarket;
}
```

* `amount`: An instance of the `Types.AssetAmount` struct, representing the amount `owedMarket` that will be repaid for `vaporAccount`. The amount must resolve to a positive number.
* `solidAccount`: An instance of the `Account.Info` struct, identifying the account that is in a healthy (solvent) state and initiating the vaporization action. The `sender` must be an operator of `solidAccount.owner`.
* `vaporAccount`: An instance of the `Account.Info` struct, identifying the account that has bad debt and is being vaporized.
* `owedMarket`: The market ID that corresponds to the market from which the undercollateralized account owes tokens.
* `heldMarket`: The market ID that corresponds to the market in which the solvent account holds tokens that will be used as collateral.

## Operations <a href="#operations" id="operations"></a>

Every state changing action to the protocol occurs through an Operation. Operations contain a series of [Actions](#actions) that each operate on an Account.

Multiple Actions can be strung together in an Operation to achieve more complex interactions with the protocol. For example, taking a short ETH position on DolomiteMargin could be achieved with an Operation containing the following Actions:

```
Sell ETH for DAI
Deposit DAI
```

Importantly collateralization is only checked at the end of an operation, so accounts are allowed to be transiently undercollateralized in the scope of one Operation. This allows for Operations like a Sell -> Deposit, where an asset is first sold, and the collateral is locked up as the second Action in the Operation.

The `operate` function in DolomiteMargin serves as the primary entry point for users and contracts to manage accounts and execute various actions within the DolomiteMargin protocol. This function enables the execution of a sequence of actions on one or more accounts, ensuring that account collateralization is maintained throughout the entire operation. Here's a breakdown of its parameters and functionality:

* `accounts`: An array of `Account.Info` structs that represent the accounts on which the operation will be performed. Each account is specified by its owner's address and a unique account number. The accounts provided here should not contain duplicates, and each action within the `actions` parameter will refer to these accounts by their index in this array.
* `actions`: An ordered array of `Actions.ActionArgs` structs that define the specific actions to be executed in the operation. The actions are processed sequentially in the order they appear in this array. Each action includes details such as the action type, the account to which it applies (referred to by its index in the `accounts` array), the market(s) involved, the amount of assets to be operated upon, and additional data specific to the action type.

Upon execution of the `operate` function, the following rules apply:

* The caller (`msg.sender`) must be the owner or operator of all accounts involved in the operation, except for accounts being liquidated, vaporized, or traded with.
* The series of actions provided in the `actions` array are executed in the order they are presented, forming a single "operation."
* Account collateralization is verified and maintained only after the entire operation is completed. This ensures that account health is considered holistically.

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

library Actions {
    enum ActionType {
        Deposit,   // Supply tokens
        Withdraw,  // Borrow tokens or withdraw supplied tokens to your wallet
        Transfer,  // Transfer balance between accounts (internally)
        Buy,       // Buy an amount of some token (externally)
        Sell,      // Sell an amount of some token (externally)
        Trade,     // Trade tokens against another account (internall)
        Liquidate, // Liquidate an undercollateralized or expiring account
        Vaporize,  // Use excess tokens to zero-out a completely negative account
        Call       // Send arbitrary data to an address that conforms to ICallee
    }

    struct ActionArgs {
        /// An enum value representing the type of action to be taken. This determines
        /// how the provided data will be parsed and processed by the protocol.
        ActionType actionType;
        /// The index into the `accounts` array where the primary account is located.
        /// This corresponds with `account` for Deposit, Withdraw, Buy, Sell or Call.
        /// This corresponds with `accountOne` for Transfer.
        /// This corresponds with `takerAccount` for Trade.
        /// This corresponds with `solidAccount` for Liquidate or Vaporize.
        uint256 accountId;
        /// The amount to use for this action
        Types.AssetAmount amount;
        /// This corresponds with `market` for Deposit, Withdraw, and Transfer.
        /// This corresponds with `makerMarket` for Buy.
        /// This corresponds with `takerMarket` for Sell.
        /// This corresponds with `inputMarket` for Trade.
        /// This corresponds with `owedMarket` for Liquidate or Vaporize.
        /// This is unused for `Call`.
        uint256 primaryMarketId;
        /// This corresponds with `takerMarket` for Buy.
        /// This corresponds with `makerMarket` for Sell.
        /// This corresponds with `outputMarket` for Trade.
        /// This corresponds with `heldMarket` for Liquidate or Vaporize.
        /// This is unused for Deposit, Withdraw, Transfer, and Call.
        uint256 secondaryMarketId;
        /// The address of the contract being called for this action. The contract
        /// must conform to the corresponding action's interface for it to work 
        /// properly, else it reverts. 
        /// This is unused for Transfer, Liquidate, and Vaporize.
        address otherAddress;
        /// Corresponds with `accountTwo` for Transfer.
        /// Corresponds with `makerAccount` for Trade.
        /// Corresponds with `liquidAccount` for Liquidate.
        /// Corresponds with `vaporAccount` for Vaporize.
        /// This is unused for Deposit, Withdraw, Buy, Sell and Call.
        uint256 otherAccountId;
        /// Generic bytes to pass through to otherAddress if used. 
        /// Unused for Deposit, Withdraw, Transfer, Liquidate, and Vaporize.
        bytes data;
    }
}

function operate(
    Account.Info[] calldata accounts,
    Actions.ActionArgs[] calldata actions
) external;
```


# Dolomite Margin - Getters

Dolomite Margin has an extensive list of functions you can use to query the smart contract's state.

These functions are callable on instances of DolomiteMargin on each network Dolomite is deployed. See smart [contract addresses](/smart-contract-addresses/core-immutable) to discover the address of DolomiteMargin on each network.

## Getters for Accounts

### `getAccountPar`

**Description:**

Get the principal value for a particular account and market.

**Parameters:**

* `account` (`Account.Info calldata`): The account to query, represented by an `Account.Info` struct.
* `marketId` (uint256): The market to query.

**Returns:**

* `Types.Par memory`: A struct containing the principal value for the specified account and market.

**Function Signature:**

```solidity
library Account {
    // Represents the unique key that specifies an account
    struct Info {
        address owner;  // The address that owns the account
        uint256 number; // A nonce that allows a single address to control many accounts
    }
}

library Types {
    struct Par {
        bool sign; // true if positive
        uint128 value;
    }
}

function getAccountPar(Account.Info calldata account, uint256 marketId) external view returns (Types.Par memory);
```

### `getAccountWei`

**Description:**

Get the token balance for a particular account and market.

**Parameters:**

* `account` (`Account.Info calldata`): The account to query, represented by an `Account.Info` struct.
* `marketId` (uint256): The market to query.

**Returns:**

* `Types.Wei memory`: A struct containing the token balance for the specified account and market.

**Function Signature:**

```solidity
library Account {
    // Represents the unique key that specifies an account
    struct Info {
        address owner;  // The address that owns the account
        uint256 number; // A nonce that allows a single address to control many accounts
    }
}

library Types {
    struct Wei {
        bool sign; // true if positive
        uint128 value;
    }
}

function getAccountWei(Account.Info calldata account, uint256 marketId) external view returns (Types.Wei memory);
```

### `getAccountStatus`

**Description:**

Get the status of an account (Normal, Liquidating, or Vaporizing).

**Parameters:**

* `account` (`Account.Info calldata`): The account to query, represented by an `Account.Info` struct.

**Returns:**

* `Account.Status`: An enumeration value representing the account's status.

**Function Signature:**

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }

    enum Status {
        Normal,
        Liquid,
        Vapor
    }
}

function getAccountStatus(Account.Info calldata account) external view returns (Account.Status);
```

### `getAccountMarketsWithBalances`

**Description:**

Get a list of markets that have a non-zero balance for an account.

**Parameters:**

* `account` (`Account.Info calldata`): The account to query, represented by an `Account.Info` struct.

**Returns:**

* `uint256[] memory`: An array of marketIds representing the markets with non-zero balances for the account.

**Function Signature:**

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

function getAccountMarketsWithBalances(Account.Info calldata account) external view returns (uint256[] memory);
```

### `getAccountNumberOfMarketsWithBalances`

**Description:**

Get the number of markets that have a non-zero balance for an account.

**Parameters:**

* `account` (`Account.Info calldata`): The account to query, represented by an `Account.Info` struct.

**Returns:**

* `uint256`: The number of markets with non-zero balances for the account.

**Function Signature:**

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

function getAccountNumberOfMarketsWithBalances(Account.Info calldata account) external view returns (uint256);
```

### `getAccountMarketWithBalanceAtIndex`

**Description:**

Get the marketId for an account's market with a non-zero balance at the given index.

**Parameters:**

* `account` (`Account.Info calldata`): The account to query, represented by an `Account.Info` struct.
* `index` (uint256): The index to query. Must be less than the value returned from  `getAccountNumberOfMarketsWithBalances`

**Returns:**

* `uint256`: The marketId for the account's market with a non-zero balance at the specified index.

**Function Signature:**

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

function getAccountMarketWithBalanceAtIndex(Account.Info calldata account, uint256 index) external view returns (uint256);
```

### `getAccountNumberOfMarketsWithDebt`

**Description:**

Get the number of markets with which an account has a negative balance.

**Parameters:**

* `account` (`Account.Info calldata`): The account to query, represented by an `Account.Info` struct.

**Returns:**

* `uint256`: The number of markets with which the account has a negative balance.

**Function Signature:**

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

function getAccountNumberOfMarketsWithDebt(Account.Info calldata account) external view returns (uint256);
```

### `getAccountValues`

**Description:**

Get the total supplied and total borrowed value of an account.

**Parameters:**

* `account` (`Account.Info calldata`): The account to query, represented by an `Account.Info` struct.

**Returns:**

* A tuple containing the following values:
  * `Monetary.Value memory supplied`: A struct containing the supplied value of the account. Has 36 decimals of precision. Meaning, a value of `123450000000000000000000000000000000000` is equal to `$123.45`.
  * `Monetary.Value memory borrowed`: A struct containing the borrowed value of the account. Has 36 decimals of precision. Meaning, a value of `123450000000000000000000000000000000000` is equal to `$123.45`.

**Function Signature:**

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

library Monetary {
    struct Value {
        uint256 value; // 36 decimals of precision
    }
}

function getAccountValues(Account.Info calldata account) external view returns (Monetary.Value memory supplied, Monetary.Value memory borrowed);
```

### `getAdjustedAccountValues`

**Description:**

Get the total supplied and total borrowed values of an account adjusted by the `marginPremium` of each market. Supplied values are divided by `(1 + marginPremium)` for each market, and borrowed values are multiplied by `(1 + marginPremium)` for each market. Comparing these adjusted values gives the margin-ratio of the account, which will be compared to the global margin-ratio when determining if the account can be liquidated.

**Parameters:**

* `account` (`Account.Info calldata`): The account to query, represented by an `Account.Info` struct.

**Returns:**

* A tuple containing the following values:
  * `Monetary.Value memory supplied`: A struct containing the supplied value of the account (adjusted for `marginPremium`). Has 36 decimals of precision. Meaning, a value of `123450000000000000000000000000000000000` is equal to `$123.45`.
  * `Monetary.Value memory borrowed`: A struct containing the borrowed value of the account (adjusted for `marginPremium`). Has 36 decimals of precision. Meaning, a value of `123450000000000000000000000000000000000` is equal to `$123.45`.

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

library Monetary {
    struct Value {
        uint256 value; // 36 decimals of precision
    }
}

function getAdjustedAccountValues(Account.Info calldata account) external view returns (Monetary.Value memory, Monetary.Value memory);
```

### `getAccountBalances`

**Description:**

Get an account's summary for each market.

**Parameters:**

* `account` (`Account.Info calldata`): The account to query, represented by an `Account.Info` struct.

**Returns:**

* A tuple containing the following values:
  * `uint[] memory`: An array of market IDs for each market.
  * `address[] memory`: An array of ERC20 token addresses for each market.
  * `Types.Par[] memory`: An array of `Types.Par` structs representing the account's principal value for each market.
  * `Types.Wei[] memory`: An array of `Types.Wei` structs representing the account's real (supplied or borrowed) number of tokens for each market.

**Function Signature:**

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

library Types {
    struct Par {
        bool sign; // true if positive
        uint128 value;
    }

    struct Wei {
        bool sign; // true if positive
        uint256 value;
    }
}

function getAccountBalances(Account.Info calldata account) external view returns (uint[] memory, address[] memory, Types.Par[] memory, Types.Wei[] memory);
```

## Getters for Markets

### `getMarketIdByTokenAddress`

Get the ERC20 token address for a market.

Parameters

* `token` (address): The token to query.

Returns

* `uint256`: The token's `marketId` if the token is valid.

#### Function Signature

```solidity
function getMarketIdByTokenAddress(address token) external view returns (uint256);
```

### `getMarketTokenAddress`

Get the ERC20 token address for a market.

Parameters

* `marketId` (uint256): The market to query.

Returns

* `address`: The token address associated with the given `marketId`. Reverts if the provided `marketId` is invalid

#### Function Signature

```solidity
function getMarketTokenAddress(uint256 marketId) external view returns (address);
```

### `getMarketIsClosing`

Return `true` if a particular market is in closing mode. Additional borrows cannot be taken from a market that is closing.

**Parameters**

* `marketId` (uint256): The market to query.

**Returns**

* `bool`: `true` if the market is closing, otherwise `false`.

**Function Signature:**

```solidity
function getMarketIsClosing(uint256 marketId) external view returns (bool);
```

### `getMarketPrice`

Get the price of the token for a market.

**Parameters**

* `marketId` (uint256): The market to query.

**Returns**

* `Monetary.Price memory`: A struct containing the price of the token in USD. The number of decimals used to represent this number is `36 - token.decimals`. Meaning, the USD price for USDC has `30` decimals. This ensures that numbers are standardized to 36 decimals when representing monetary value.

**Function Signature:**

```solidity
library Monetary {
   /*
    * The price of a base-unit of an asset. Has `36 - token.decimals` decimals
    */
   struct Price {
      uint256 value;
   }
}

function getMarketPrice(uint256 marketId) external view returns (Monetary.Price memory);
```

### `getNumMarkets`

**Description:**

Get the total number of markets.

**Returns:**

* `uint256`: The number of markets.

**Function Signature:**

```solidity
function getNumMarkets() external;
```

### `getMarketTotalPar`

**Description:**

Get the total principal amounts (borrowed and supplied) for a market.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Types.TotalPar memory`: A struct containing the total principal amounts (borrowed and supplied) for the specified market.

**Function Signature:**

```solidity
library Types {
    struct TotalPar {
        uint128 borrow;
        uint128 supply;
    }
}

function getMarketTotalPar(uint256 marketId) external view returns (Types.TotalPar memory);
```

### `getMarketTotalWei`

{% hint style="warning" %}
This function is not available on Arbitrum
{% endhint %}

**Description:**

Get the total wei amounts (borrowed and supplied) for a market.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Types.TotalWei memory`: A struct containing the total principal amounts (borrowed and supplied) for the specified market.

**Function Signature:**

```solidity
library Types {
    struct TotalWei {
        uint128 borrow;
        uint128 supply;
    }
}

function getMarketTotalWei(uint256 marketId) external view returns (Types.TotalWei memory);
```

### `getMarketCachedIndex`

**Description:**

Get the most recently cached interest index for a market. The `Interest.Index` struct is used to convert between Par (scaled) and Wei (real) values.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Interest.Index memory`: A struct containing the most recent interest index for the specified market.

**Function Signature:**

```solidity
library Interest {
    struct Index {
        uint96 borrow;
        uint96 supply;
        uint32 lastUpdate;
    }
}

function getMarketCachedIndex(uint256 marketId) external view returns (Interest.Index memory);
```

### `getMarketCurrentIndex`

**Description:**

Get the interest index for a market if it were to be updated right now at the current `block.timestamp`.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Interest.Index memory`: A struct containing the estimated current interest index for the specified market.

**Function Signature:**

```solidity
library Interest {
    struct Index {
        uint96 borrow;
        uint96 supply;
        uint32 lastUpdate;
    }
}

function getMarketCurrentIndex(uint256 marketId) external view returns (Interest.Index memory);
```

### `getMarketPriceOracle`

**Description:**

Get the price oracle address for a market.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `IPriceOracle`: The address of the price oracle associated with the specified market.

**Function Signature:**

```solidity
function getMarketPriceOracle(uint256 marketId) external view returns (IPriceOracle);
```

### `getMarketInterestSetter`

**Description:**

Get the interest-setter address for a market.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `IInterestSetter`: The address of the interest-setter associated with the specified market.

**Function Signature:**

```solidity
function getMarketInterestSetter(uint256 marketId) external view returns (IInterestSetter);
```

### `getMarketMarginPremium`

**Description:**

Get the margin premium for a market. A margin premium makes it so that any positions that include the market require a higher collateralization to avoid being liquidated.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Decimal.D256 memory`: A struct containing the margin premium for the specified market. Decimals are scaled to have 18 decimals of precision. Meaning a value of 1e16 (`10000000000000000`) is equal to 0.01.

**Function Signature:**

```solidity
library Decimal {
    struct D256 {
        uint256 value;
    }
}

function getMarketMarginPremium(uint256 marketId) external view returns (Decimal.D256 memory);
```

### `getMarketSpreadPremium`

**Description:**

Get the liquidation spread premium for a market. A spread premium makes it so that any liquidations that include the market have a higher spread than the global default.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Decimal.D256 memory`: A struct containing the spread premium for the specified market.

**Function Signature:**

```solidity
library Decimal {
    struct D256 {
        uint256 value;
    }
}

function getMarketSpreadPremium(uint256 marketId) external view returns (Decimal.D256 memory);
```

### `getMarketMaxWei`

**Description:**

Get the maximum supply Wei for a given market. A value of `0` denotes there being no maximum.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Types.Wei memory`: A struct containing the maximum supply Wei allowed for the specified market.

**Function Signature:**

```solidity
library Types {
    struct Wei {
        bool sign; // true if positive; can be false OR true if value == 0
        uint256 value;
    }
}

function getMarketMaxWei(uint256 marketId) external view returns (Types.Wei memory);
```

### `getMarketMaxSupplyWei`

{% hint style="warning" %}
This function is not available on Arbitrum
{% endhint %}

**Description:**

Get the maximum supply Wei for a given market. A value of `0` denotes there being no maximum.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Types.Wei memory`: A struct containing the maximum supply Wei allowed for the specified market.

**Function Signature:**

```solidity
library Types {
    struct Wei {
        bool sign; // true if positive; can be false OR true if value == 0
        uint256 value;
    }
}

function getMarketMaxSupplyWei(uint256 marketId) external view returns (Types.Wei memory);
```

### `getMarketMaxBorrowWei`

{% hint style="warning" %}
This function is not available on Arbitrum
{% endhint %}

**Description:**

Get the maximum borrow Wei for a given market. A value of `0` denotes there being no maximum.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Types.Wei memory`: A struct containing the maximum supply Wei allowed for the specified market.

**Function Signature:**

```solidity
library Types {
    struct Wei {
        bool sign; // true if positive; can be false OR true if value == 0
        uint256 value;
    }
}

function getMarketMaxBorrowWei(uint256 marketId) external view returns (Types.Wei memory);
```

### `getMarketInterestRate`

**Description:**

Get the current borrower interest rate for a market.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Interest.Rate memory`: A struct containing the current interest rate for borrowers in the specified market. Interest rates are denoted as percentage-per-second. So a value of `3,170,979,198` denotes an interest rate of \~10%, which is calculated using the following formula:

```
0.10 OR 10% = (
    3,170,979,198 interest per second 
    * 86,400 seconds per day 
    * 365 days per year
) / 10 ** 18;
```

**Function Signature:**

```solidity
library Interest {
    struct Rate { 
        uint256 value;
    }
}

function getMarketInterestRate(uint256 marketId) external view returns (Interest.Rate memory);
```

### `getMarket`

**Description:**

Get basic information about a particular market.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* `Storage.Market memory`: A struct containing the current state of the specified market.

**Function Signature:**

```solidity
library Storage {
    struct Market {
        address token;
        bool isClosing;
        bool isRecyclable;
        Types.TotalPar totalPar;
        Interest.Index index;
        IPriceOracle priceOracle;
        IInterestSetter interestSetter;
        Decimal.D256 marginPremium;
        Decimal.D256 spreadPremium;
        Types.Wei maxWei;
    }
}

function getMarket(uint256 marketId) external view returns (Storage.Market memory);
```

### `getMarketWithInfo`

**Description:**

Get comprehensive information about a particular market.

**Parameters:**

* `marketId` (uint256): The market to query.

**Returns:**

* A tuple containing the values:
  * `Storage.Market memory`: A struct containing the current state of the market.
  * `Interest.Index memory`: A struct containing the current estimated interest index.
  * `Monetary.Price memory`: A struct containing the current token price.
  * `Interest.Rate memory`: A struct containing the current market interest rate.

**Function Signature:**

```solidity
library Storage {
    struct Market {
        address token;
        bool isClosing;
        bool isRecyclable;
        Types.TotalPar totalPar;
        Interest.Index index;
        IPriceOracle priceOracle;
        IInterestSetter interestSetter;
        Decimal.D256 marginPremium;
        Decimal.D256 spreadPremium;
        Types.Wei maxWei;
    }
}

library Interest {
    struct Index {
        uint96 borrow; // 18 decimals
        uint96 supply; // 18 decimals
        uint32 lastUpdate;
    }

    struct Rate {
        uint256 value; // interest per second, measured with 18 decimals
    }
}

library Monetary {
   /*
    * The price of a base-unit of an asset. Has `36 - token.decimals` decimals
    */
   struct Price {
      uint256 value;
   }
}

function getMarketWithInfo(uint256 marketId) external view returns (Storage.Market memory, Interest.Index memory, Monetary.Price memory, Interest.Rate memory);
```

## Getters for Permissions

### `getIsLocalOperator`

**Description:**

Return `true` if a particular address is approved as an operator for an owner's accounts. Approved operators can act on the accounts of the owner as if it were the operator's own.

**Parameters:**

* `owner` (`address`): The owner of the accounts.
* `operator` (`address`): The possible operator.

**Returns:**

* `bool`: `true` if the operator is approved for the owner's accounts, `false` otherwise.

**Function Signature:**

```solidity
function getIsLocalOperator(address owner, address operator) external view returns (bool);
```

### `getIsGlobalOperator`

**Description:**

Return `true` if a particular address is approved as a global operator. Such an address can act on any account as if it were the operator's own.

**Parameters:**

* `operator` (`address`): The address to query.

**Returns:**

* `bool`: `true` if the operator is a global operator, `false` otherwise.

**Function Signature:**

```solidity
function getIsGlobalOperator(address operator) external view returns (bool);
```

### `getIsAutoTraderSpecial`

**Description:**

Checks if the `autoTrader` can only be invoked by a global operator.

**Parameters:**

* `autoTrader` (`address`): The trader that should be checked for special call privileges.

**Returns:**

* `bool`: `true` if the `autoTrader` can only be invoked by a global operator, `false` otherwise.

**Function Signature:**

```solidity
function getIsAutoTraderSpecial(address autoTrader) external view returns (bool);
```

### `owner`

**Description:**

Returns the address of the current owner of DolomiteMargin.

**Returns:**

* `address`: The address of the current owner.

**Function Signature:**

```solidity
function owner() external view returns (address);
```

## Getters for Risk Params

### `getMarginRatio`

**Description:**

Get the global minimum margin-ratio that every position must maintain to prevent being liquidated.

**Returns:**

* `Decimal.D256 memory`: A struct representing the global margin-ratio. Has 18 decimals of precision, meaning a value of `150000000000000000` equals 15%. The protocol uses this number as `1 + margin-ratio`, so in the prior example, the returned result would mean `115%` minimum collateralization (or `86.9565%` LTV)

**Function Signature:**

```solidity
library Decimal {
    struct D256 {
        uint256 value;
    }
}

function getMarginRatio() external view returns (Decimal.D256 memory);
```

### `getMarginRatioForAccount`

{% hint style="warning" %}
This function is not available on Arbitrum
{% endhint %}

**Description:**

Get the global minimum margin-ratio that every position must maintain to prevent being liquidated.

**Params:**

* `Account.Info memory`: The account whose margin ratio is being queried. This is used to determine if there is an override that supercedes the default value in `getMarginRatio`.

**Returns:**

* `Decimal.D256 memory`: A struct representing the global margin-ratio. Has 18 decimals of precision, meaning a value of `150000000000000000` equals 15%. The protocol uses this number as `1 + margin-ratio`, so in the prior example, the returned result would mean `115%` minimum collateralization (or `86.9565%` LTV)

**Function Signature:**

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

library Decimal {
    struct D256 {
        uint256 value;
    }
}

function getMarginRatioForAccount(
    Account.Info memory account
) external view returns (Decimal.D256 memory);
```

### `getLiquidationSpread`

**Description:**

Get the global liquidation spread. This is the spread between oracle prices that is used to incentivize the liquidation of risky positions.

**Returns:**

* `Decimal.D256 memory`: A struct representing the global liquidation spread. Has 18 decimals of precision. Meaning, a value of `50000000000000000` is equal to 5%.

**Function Signature:**

```solidity
library Decimal {
    struct D256 {
        uint256 value;
    }
}

function getLiquidationSpread() external view returns (Decimal.D256 memory);
```

### `getLiquidationSpreadForPair`

**Description:**

Get the adjusted liquidation spread for a specific market pair. This is equal to the global liquidation spread multiplied by `(1 + spreadPremium)` for each of the two markets.

**Parameters:**

* `heldMarketId` (`uint256`): The market for which the account has collateral.
* `owedMarketId` (`uint256`): The market for which the account has borrowed tokens.

**Returns:**

* `Decimal.D256 memory`: A struct representing the adjusted liquidation spread for the given market pair. Has 18 decimals of precision. Meaning, a value of `75000000000000000` is equal to 7.5%.

**Function Signature:**

```solidity
library Decimal {
    struct D256 {
        uint256 value;
    }
}

function getLiquidationSpreadForPair(uint256 heldMarketId, uint256 owedMarketId) external view returns (Decimal.D256 memory);
```

### `getLiquidationSpreadForAccountAndPair`

{% hint style="warning" %}
This function is not available on Arbitrum
{% endhint %}

**Description:**

Get the adjusted liquidation spread for a specific market pair. This is equal to the global liquidation spread multiplied by `(1 + spreadPremium)` for each of the two markets.

**Parameters:**

* `Account.Info memory`: The account whose liquidation spread is being queried. This is used to determine if there is an override that supercedes the default value in `getLiquidationSpread`.
* `heldMarketId` (`uint256`): The market for which the account has collateral.
* `owedMarketId` (`uint256`): The market for which the account has borrowed tokens.

**Returns:**

* `Decimal.D256 memory`: A struct representing the adjusted liquidation spread for the given market pair. Has 18 decimals of precision. Meaning, a value of `75000000000000000` is equal to 7.5%.

**Function Signature:**

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

library Decimal {
    struct D256 {
        uint256 value;
    }
}

function getLiquidationSpreadForAccountAndPair(
    Account.Info calldata account,
    uint256 heldMarketId,
    uint256 owedMarketId
) external view;
```

### `getEarningsRate`

**Description:**

Get the global earnings-rate variable that determines what percentage of the interest paid by borrowers gets passed on to suppliers. The remaining percentage is paid to the protocol owner.

**Returns:**

* `Decimal.D256 memory`: A struct representing the global earnings rate. Has 18 decimals of precision. Meaning, a value of `850000000000000000` is 85% and 85% of the borrow rate is paid to suppliers.

**Function Signature:**

```solidity
library Decimal {
    struct D256 {
        uint256 value;
    }
}

function getEarningsRate() external view returns (Decimal.D256 memory);
```

### `getMinBorrowedValue`

**Description:**

Get the global minimum-borrow value, which is the minimum value of any account's borrow position can have on DolomiteMargin.

**Returns:**

* `Monetary.Value memory`: A struct representing the global minimum borrow value. A value of `0` means there is no minimum. Has 36 decimals of precision, meaning a value of `100000000000000000000000000000000000000` denotes $100.

**Function Signature:**

```solidity
library Monetary {
    struct Value {
        uint256 value; // 36 decimals of precision
    }
}

function getMinBorrowedValue() external view returns (Monetary.Value memory);
```

### `getRiskParams`

**Description:**

Get all global risk parameters in a single struct.

**Returns:**

* `Storage.RiskParams memory`: A struct representing all global risk parameters.

**Function Signature:**

```solidity
library Decimal {
    struct D256 {
        uint256 value;
    }
}

library Monetary {
    struct Value {
        uint256 value; // 36 decimals of precision
    }
}

library Storage {
    struct RiskParams {
        Decimal.D256 marginRatio;
        Decimal.D256 liquidationSpread;
        Decimal.D256 earningsRate;
        Monetary.Value minBorrowedValue;
        uint256 accountMaxNumberOfMarketsWithBalances;
    }
}

function getRiskParams() external view returns (Storage.RiskParams memory);
```

### `getRiskLimits`

**Description:**

Get all global risk parameter limits in a single struct. These are the maximum limits at which the risk parameters can be set by the admin of DolomiteMargin. These values are **immutable** and cannot change after DolomiteMargin is initialized.

**Returns:**

* `Storage.RiskLimits memory`: A struct representing all global risk parameter limits.

**Function Signature:**

```solidity
library Storage {
    struct RiskLimits {
        uint64 marginRatioMax;
        uint64 liquidationSpreadMax;
        uint64 earningsRateMax;
        uint64 marginPremiumMax;
        uint64 spreadPremiumMax;
        uint128 minBorrowedValueMax;
    }
}

function getRiskLimits() external view returns (Storage.RiskLimits memory);
```

### `getDefaultAccountRiskOverrideSetter`

**Description:**

Get the account risk override setter for global use. This contract enables E-Mode and granular risk control over positions.

**Returns:**

* `IDolomiteAccountRiskOverrideSetter`: An address pointing to the risk override setter contract.

**Function Signature:**

```solidity
function getDefaultAccountRiskOverrideSetter() external view returns (IDolomiteAccountRiskOverrideSetter);
```


# Dolomite Margin - Events

Dolomite's Core smart contracts emit events that make tracking system changes easy.

These events are all emitted by instances of DolomiteMargin on each network Dolomite is deployed. See smart [contract addresses](/smart-contract-addresses/core-immutable) to discover the address of DolomiteMargin on each network.

## Account Operation Events

These events are logged right after they occur within each [Action](/developer-documentation/dolomite-margin-glossary#actions) of an [Operation](/developer-documentation/dolomite-margin-glossary#operations)

### `BalanceUpdate` Struct

**Description:**

The `BalanceUpdate` struct represents an update to an account's balance, including changes to both token amounts and principal amounts.

**Struct Members:**

* `deltaWei` (`Types.Wei`): The change in token balance (Wei) for the account. Can be positive or negative.
* `newPar` (`Types.Par`): The new principal value for the account. Can be positive or negative.

**Struct Signature:**

```solidity
library Types {
    struct Wei {
        bool sign; // true if positive
        uint128 value;
    }

    struct Par {
        bool sign; // true if positive
        uint128 value;
    }
}

struct BalanceUpdate {
    Types.Wei deltaWei;
    Types.Par newPar;
}
```

### `LogOperation` Event

**Topic 0:** `0x91b01baeee3a24b590d112613814d86801005c7ef9353e7fc1eaeaf33ccf83b0`

**Description:**

This event is emitted at the start of an operation.

**Event Signature:**

```solidity
event LogOperation(
    address sender
);
```

* `sender` (`address`): The address of the caller of DolomiteMargin who performed the operation.

### `LogDeposit` Event

**Topic 0:** `0x2bad8bc95088af2c247b30fa2b2e6a0886f88625e0945cd3051008e0e270198f`

**Description:**

This event is emitted when tokens are deposited into an account via a [`Deposit`](/developer-documentation/dolomite-margin-glossary#deposit) Action.

**Event Signature:**

```solidity
event LogDeposit(
    address indexed accountOwner,
    uint256 accountNumber,
    uint256 market,
    BalanceUpdate update,
    address from
);
```

* `accountOwner` (`address`): The owner of the account where the deposit occurred.
* `accountNumber` (`uint256`): The account number where the deposit occurred.
* `market` (`uint256`): The market identifier where the deposit occurred.
* `update` (`BalanceUpdate`): The balance update for the account as a result of the deposit.
* `from` (`address`): The address from which the deposit was made.

### `LogWithdraw` Event

**Topic 0:** `0xbc83c08f0b269b1726990c8348ffdf1ae1696244a14868d766e542a2f18cd7d4`

**Description:**

This event is emitted when tokens are withdrawn from an account via a [`Withdraw`](/developer-documentation/dolomite-margin-glossary#withdraw) Action.

**Event Signature:**

```solidity
event LogWithdraw(
    address indexed accountOwner,
    uint256 accountNumber,
    uint256 market,
    BalanceUpdate update,
    address to
);
```

* `accountOwner` (`address`): The owner of the account from which the withdrawal occurred.
* `accountNumber` (`uint256`): The account number from which the withdrawal occurred.
* `market` (`uint256`): The market identifier from which the withdrawal occurred.
* `update` (`BalanceUpdate`): The balance update for the account as a result of the withdrawal.
* `to` (`address`): The address to which the withdrawal was sent.

### `LogTransfer` Event

**Topic 0:** `0x21281f8d59117d0399dc467dbdd321538ceffe3225e80e2bd4de6f1b3355cbc7`

**Description:**

This event is emitted when a transfer of tokens occurs between two accounts via a [`Transfer`](/developer-documentation/dolomite-margin-glossary#transfer) Action. Note this does not materialize an ERC20 transfer event since only virtual liquidity is transferred.

**Event Signature:**

```solidity
event LogTransfer(
    address indexed accountOneOwner,
    uint256 accountOneNumber,
    address indexed accountTwoOwner,
    uint256 accountTwoNumber,
    uint256 market,
    BalanceUpdate updateOne,
    BalanceUpdate updateTwo
);
```

* `accountOneOwner` (`address`): The owner of the first account involved in the transfer.
* `accountOneNumber` (`uint256`): The account number of the first account involved in the transfer.
* `accountTwoOwner` (`address`): The owner of the second account involved in the transfer.
* `accountTwoNumber` (`uint256`): The account number of the second account involved in the transfer.
* `market` (`uint256`): The market identifier where the transfer occurred.
* `updateOne` (`BalanceUpdate`): The balance update for the first account as a result of the transfer.
* `updateTwo` (`BalanceUpdate`): The balance update for the second account as a result of the transfer.

### `LogBuy` Event

**Topic 0:** `0x2e346762bf4ae4568971c30b51fcebd2138275aafcfe12d872956e9f3e120893`

**Description:**

This event is emitted when a [`Buy`](/developer-documentation/dolomite-margin-glossary#buy) Action occurs, representing a trade where one account purchases tokens via an exchange wrapper contract. Mechnically, this Action is similar to Uniswap's `swapTokensForExactTokens`.

**Event Signature:**

```solidity
event LogBuy(
    address indexed accountOwner,
    uint256 accountNumber,
    uint256 takerMarket,
    uint256 makerMarket,
    BalanceUpdate takerUpdate,
    BalanceUpdate makerUpdate,
    address exchangeWrapper
);
```

* `accountOwner` (`address`): The owner of the account that performed the buy operation.
* `accountNumber` (`uint256`): The account number that performed the buy operation.
* `takerMarket` (`uint256`): The market identifier for the taker's (buyer's) side of the trade (the `inputMarket`).
* `makerMarket` (`uint256`): The market identifier for the maker's (seller's) side of the trade (the `outputMarket`).
* `takerUpdate` (`BalanceUpdate`): The balance update for the taker's account as a result of the buy.
* `makerUpdate` (`BalanceUpdate`): The balance update for the maker's account as a result of the buy.
* `exchangeWrapper` (`address`): The address of the exchange wrapper contract involved in the buy action.

### `LogSell` Event

**Topic 0:** `0xcc3330184b6d88cad87f9e9543b4d4110a6a3eaf20164ca5252d598d0acba3f1`

**Description:**

This event is emitted when a [`Sell`](/developer-documentation/dolomite-margin-glossary#sell) Action occurs, representing a trade where one account sells tokens via an exchange wrapper contract. Mechanically, this Action is similar to Uniswap's `swapExactTokensForTokens`.

**Event Signature:**

```solidity
event LogSell(
    address indexed accountOwner,
    uint256 accountNumber,
    uint256 takerMarket,
    uint256 makerMarket,
    BalanceUpdate takerUpdate,
    BalanceUpdate makerUpdate,
    address exchangeWrapper
);
```

* `accountOwner` (`address`): The owner of the account that performed the sell operation.
* `accountNumber` (`uint256`): The account number that performed the sell operation.
* `takerMarket` (`uint256`): The market identifier for the taker's (seller's) side of the trade (the `inputMarket`).
* `makerMarket` (`uint256`): The market identifier for the maker's (buyer's) side of the trade (the `outputMarket`).
* `takerUpdate` (`BalanceUpdate`): The balance update for the taker's account as a result of the sell.
* `makerUpdate` (`BalanceUpdate`): The balance update for the maker's account as a result of the sell.
* `exchangeWrapper` (`address`): The address of the exchange wrapper contract involved in the sell action.

### `LogTrade` Event

**Topic 0:** `0x54d4cc60cf7d570631cc1a58942812cb0fc461713613400f56932040c3497d19`

**Description:**

This event is emitted when a [`Trade`](/developer-documentation/dolomite-margin-glossary#trade) Action occurs between a taker and a maker account using an auto-trader contract.

**Event Signature:**

```solidity
event LogTrade(
    address indexed takerAccountOwner,
    uint256 takerAccountNumber,
    address indexed makerAccountOwner,
    uint256 makerAccountNumber,
    uint256 inputMarket,
    uint256 outputMarket,
    BalanceUpdate takerInputUpdate,
    BalanceUpdate takerOutputUpdate,
    BalanceUpdate makerInputUpdate,
    BalanceUpdate makerOutputUpdate,
    address autoTrader
);
```

* `takerAccountOwner` (`address`): The owner of the taker account involved in the trade.
* `takerAccountNumber` (`uint256`): The account number of the taker account involved in the trade.
* `makerAccountOwner` (`address`): The owner of the maker account involved in the trade. The `makerAccountOwner` is the address that approved the trade for the auto-trader contract.
* `makerAccountNumber` (`uint256`): The account number of the maker account involved in the trade.
* `inputMarket` (`uint256`): The market identifier for the input tokens of the trade.
* `outputMarket` (`uint256`): The market identifier for the output tokens of the trade.
* `takerInputUpdate` (`BalanceUpdate`): The balance update for the taker's input tokens as a result of the trade.
* `takerOutputUpdate` (`BalanceUpdate`): The balance update for the taker's output tokens as a result of the trade.
* `makerInputUpdate` (`BalanceUpdate`): The balance update for the maker's input tokens as a result of the trade.
* `makerOutputUpdate` (`BalanceUpdate`): The balance update for the maker's output tokens as a result of the trade.
* `autoTrader` (`address`): The address of the auto-trader contract used for the trade.

### `LogCall` Event

**Topic 0:** `0xab38cdc4a831ebe6542bf277d36b65dbc5c66a4d03ec6cf56ac38de05dc30098`

**Description:**

This event is emitted when a [`Call`](/developer-documentation/dolomite-margin-glossary#call) Action occurs.

**Event Signature:**

```solidity
event LogCall(
    address indexed accountOwner,
    uint256 accountNumber,
    address callee
);
```

* `accountOwner` (`address`): The owner of the account that initiated the call.
* `accountNumber` (`uint256`): The account number of the account owner that initiated the call.
* `callee` (`address`): The address of the contract that was called.

### `LogLiquidate` Event

**Topic 0:** `0x1b9e65b359b871d74b1af1fc8b13b11635bfb097c4631b091eb762fda7e67dc7`

**Description:**

This event is emitted when a [`Liquidate`](/developer-documentation/dolomite-margin-glossary#liquidate) Action occurs, representing the process of one account liquidating another account's under-collateralized position.

**Event Signature:**

```solidity
event LogLiquidate(
    address indexed solidAccountOwner,
    uint256 solidAccountNumber,
    address indexed liquidAccountOwner,
    uint256 liquidAccountNumber,
    uint256 heldMarket,
    uint256 owedMarket,
    BalanceUpdate solidHeldUpdate,
    BalanceUpdate solidOwedUpdate,
    BalanceUpdate liquidHeldUpdate,
    BalanceUpdate liquidOwedUpdate
);
```

* `solidAccountOwner` (`address`): The owner of the account performing the liquidation.
* `solidAccountNumber` (`uint256`): The account number of the account performing the liquidation.
* `liquidAccountOwner` (`address`): The owner of the account being liquidated.
* `liquidAccountNumber` (`uint256`): The account number of the account being liquidated.
* `heldMarket` (`uint256`): The market identifier for the held (collateral) tokens.
* `owedMarket` (`uint256`): The market identifier for the owed (borrowed) tokens.
* `solidHeldUpdate` (`BalanceUpdate`): The balance update for the held tokens of the account performing the liquidation.
* `solidOwedUpdate` (`BalanceUpdate`): The balance update for the owed tokens of the account performing the liquidation.
* `liquidHeldUpdate` (`BalanceUpdate`): The balance update for the held tokens of the account being liquidated.
* `liquidOwedUpdate` (`BalanceUpdate`): The balance update for the owed tokens of the account being liquidated.

### `LogVaporize` Event

**Topic 0:** `0xefdcfda4e0be180f29bfeebc4bcb6de1e950d70b41e9ee813bff9882ee16ca91`

**Description:**

This event is emitted when a [`Vaporize`](/developer-documentation/dolomite-margin-glossary#vaporize) Action occurs, representing the process of a solid account using the admin's excess tokens to cover a vapor account's bad debt. A position's debt is considered to be bad if there is no held value (`balance == 0`) but there is still debt held in the position.

**Event Signature:**

```solidity
event LogVaporize(
    address indexed solidAccountOwner,
    uint256 solidAccountNumber,
    address indexed vaporAccountOwner,
    uint256 vaporAccountNumber,
    uint256 heldMarket,
    uint256 owedMarket,
    BalanceUpdate solidHeldUpdate,
    BalanceUpdate solidOwedUpdate,
    BalanceUpdate vaporOwedUpdate
);
```

* `solidAccountOwner` (`address`): The owner of the solid account from which the vaporization occurred.
* `solidAccountNumber` (`uint256`): The account number of the solid account from which the vaporization occurred.
* `vaporAccountOwner` (`address`): The owner of the vapor account that has bad debt
* `vaporAccountNumber` (`uint256`): The account number of the vapor account has bad debt
* `heldMarket` (`uint256`): The market identifier for the held (collateral) tokens.
* `owedMarket` (`uint256`): The market identifier for the owed (borrowed) tokens.
* `solidHeldUpdate` (`BalanceUpdate`): The balance update for the held tokens of the solid account.
* `solidOwedUpdate` (`BalanceUpdate`): The balance update for the owed tokens of the solid account.
* `vaporOwedUpdate` (`BalanceUpdate`): The balance update for the owed tokens of the vaporized account.

### `LogOperatorSet` Event

**Topic 0:** `0x4d7f317d2088d039c2a95a09fcbf9cc9191fad5905f883c937cc3d317c4a6327`

**Description:**

This event is emitted when an account adds or removes another contract (or account) as an operator for itself.

**Event Signature:**

```solidity
event LogOperatorSet(
    address indexed owner,
    address operator,
    bool trusted
);
```

* `owner` (`address`): The owner of the account for which the operator status was updated.
* `operator` (`address`): The address of the operator whose status was updated.
* `trusted` (`bool`): The new status of the operator. `true` indicates the operator is trusted, while `false` indicates the operator is untrusted.

## Market Events

### `LogIndexUpdate` Event (All Networks Except Arbitrum)

**Topic 0:** `0x247e2f5b851dd23ef755d9ad527e801ee202c4097acd70c21e82dc5602cdd879`

**Description:**

This event is emitted when an interest index is updated for a specific market, indicating a change in the accrued borrow and supply values, as well as possibly a change in the borrow and supply rates. The interest index is updated, at-most, once per block. This event is emitted at the start of an [Operation](/developer-documentation/dolomite-margin-glossary#operators), before the [Actions](/developer-documentation/dolomite-margin-glossary#actions) are processed.

**Event Signature:**

```solidity
library Interest {
    struct Index {
        uint112 borrow;
        uint112 supply;
        uint32 lastUpdate;
    }
}

event LogIndexUpdate(
    uint256 indexed market,
    Interest.Index index
);
```

* `market` (`uint256`): The identifier of the market for which the interest index was updated.
* `index` (`Interest.Index`): The updated interest index for the market, containing information about the updated borrowing and supplying values used to convert borrow or supply [Par](/developer-documentation/dolomite-margin-glossary#par) to borrow or supply [Wei](/developer-documentation/dolomite-margin-glossary#wei).

### `LogIndexUpdate` Event (Arbitrum)

**Topic 0:** `0xf4626fd1187f91e6761ffb8a6ac3e8d9235a4a92da54e43feb0c57c4a4a322ab`

**Description:**

This event is emitted when an interest index is updated for a specific market, indicating a change in the accrued borrow and supply values, as well as possibly a change in the borrow and supply rates. The interest index is updated, at-most, once per block. This event is emitted at the start of an [Operation](/developer-documentation/dolomite-margin-glossary#operators), before the [Actions](/developer-documentation/dolomite-margin-glossary#actions) are processed.

**Event Signature:**

```solidity
library Interest {
    struct Index {
        uint96 borrow;
        uint96 supply;
        uint32 lastUpdate;
    }
}

event LogIndexUpdate(
    uint256 indexed market,
    Interest.Index index
);
```

* `market` (`uint256`): The identifier of the market for which the interest index was updated.
* `index` (`Interest.Index`): The updated interest index for the market, containing information about the updated borrowing and supplying values used to convert borrow or supply [Par](/developer-documentation/dolomite-margin-glossary#par) to borrow or supply [Wei](/developer-documentation/dolomite-margin-glossary#wei).

### `LogInterestRate` Event (All Networks Except Arbitrum)

**Topic 0:** `0x97c9b8866705111329b3d1b18589bf0add9e1f1c8a1ce4a9fbf3bd32dc2e6d41`

**Description:**

This event is emitted after each [Operation](/developer-documentation/dolomite-margin-glossary#operations) and logs the current interest rate (at the time of the transaction settling) for a specific market. Assuming an interest rate model is solely dependent on the  borrow utilization of a market, this will be the interest rate that is applied to the market until the next [Operation](/developer-documentation/dolomite-margin-glossary#operations) occurs.

**Event Signature:**

```solidity
library Interest {
    struct Index {
        uint112 borrow;
        uint112 supply;
        uint32 lastUpdate;
    }
}

event LogIndexUpdate(
    uint256 indexed market,
    Interest.Rate rate
);
```

* `market` (`uint256`): The identifier of the market for which the interest index was updated.
* `rate` (`Interest.Rate`): The updated borrow interest rate for the market. This number is represented as interest accrued every second. To get a normalized borrow APR, multiply this number by `31,536,000` (the number of seconds in a year).

### `LogOraclePrice` Event

**Topic 0:** `0x223e16b9e4703ea2acd14a8caa0fcbbf4a42d3e8b7a33234e841bd1808ee9ec0`

**Description:**

This event is emitted when an oracle price is retrieved for a specific market at the start of an [Operation](/developer-documentation/dolomite-margin-glossary#operators), before the [Actions](/developer-documentation/dolomite-margin-glossary#actions) are processed. It specifies to data indexers and block explorers what the USD value of a market was during an [Operation](/developer-documentation/dolomite-margin-glossary#operators).

**Event Signature:**

```solidity
library Monetary {
    /*
     * The price of a base-unit of an asset. Has `36 - token.decimals` decimals
     */
    struct Price {
        uint256 value;
    }
}

event LogOraclePrice(
    uint256 indexed market,
    Monetary.Price price
);
```

* `market` (`uint256`): The identifier of the market for which the oracle price was updated.
* `price` (`Monetary.Price`): The oracle price for the market during an [Operation](/developer-documentation/dolomite-margin-glossary#operators). Prices have `36 - token.decimals` decimals, meaning  a value of `1000000000000000000000000000000` corresponds with $1.00 for USDC (USDC has 6 decimals of precision).


# Dolomite Margin - dTokens

An ERC4626 vault token that wraps around your Dolomite balance

User's balances on Dolomite are not tokenized — meaning you do not receive a receipt token when you deposit assets into Dolomite. For certain lendable assets on Dolomite, other protocols build integrations on top of our system. In order for these integrations to be as seamless as possible, we have created ERC4626 vault tokens that wrap around a user's Dolomite Balance. These dTokens are NOT available for every asset and are specifically created for markets that need the ERC4626 vault token for integration purposes.

Within Dolomite, a user has a [Par](/developer-documentation/dolomite-margin-glossary#par) balance and a [Wei](/developer-documentation/dolomite-margin-glossary#wei) balance (see [Glossary](/developer-documentation/dolomite-margin-glossary#wei-amp-par) for more info). A user's static Par balance represents the number of shares they own of the ERC4626 vault for that market, and their Wei balance represents the numbers of assets they would receive by redeeming those shares. For more information on ERC4626 vaults, here is the [EIP-4626](https://eips.ethereum.org/EIPS/eip-4626) standard.

These dTokens automatically recognize user's balances on Dolomite that performed deposits via the DepositWithdrawal Router, low-level calls to `operate`, or any other way of depositing into Dolomite.

{% hint style="info" %}
Note, these contract addresses are guaranteed to be the same across all networks. If a dToken is not found on a specific network, that means Dolomite has not deployed that token yet on the network. You can make a request for the team to do so.
{% endhint %}

### DTokens

<table><thead><tr><th width="230">Market</th><th>DToken Address</th></tr></thead><tbody><tr><td>AAVE</td><td>0x4bE3F751b8514EB73E031EDABA6764aBC1102E27</td></tr><tr><td>beraETH</td><td>0xA4d6d4e667efFE07f0C6777399721Ddd03f04630</td></tr><tr><td>BYUSD</td><td>0x2948609CdD0ac4110b63165be9D4AADe66bF40F6</td></tr><tr><td>CRV</td><td>0x305BD43144b5C37Ab917163BCa6281a818182cf2</td></tr><tr><td>deUSD</td><td>0xa0D8da5B95d776cc952a32C655089c227B5BEbd6</td></tr><tr><td>DAI</td><td>0x73D25BF215A7487badC695d7ADa30f1Ad509D642</td></tr><tr><td>eBTC</td><td>0x6B21026e1Fe8be7F23660B5fBFb1885dbd1147E6</td></tr><tr><td>HONEY</td><td>0x7f2B60fDff1494A0E3e060532c9980d7fad0404B</td></tr><tr><td>LBTC</td><td>0x90C65009504C8DDA1A78cA24fe5D80264A568aab</td></tr><tr><td>LINK</td><td>0x2411a954d99c07441Ecc06c952477BBafdCA1e87</td></tr><tr><td>mETH</td><td>0xA32E098b42562654cdf4F17f1ea9F32781A45dA9</td></tr><tr><td>NECT</td><td>0x474F32Eb1754827C531C16330Db07531e901BcBe</td></tr><tr><td>pBTC</td><td>0xaCEBb7b9e2ad9810F8BE9D8e818AE6ad3FAfD5F4</td></tr><tr><td>pumpBTC</td><td>0x341AB1EF96517E88F276c8455eF5e6a6e1Fb2958</td></tr><tr><td>rsETH</td><td>0xE6dE202a0d14af12b298b6c07CB8653d1c2E12dD</td></tr><tr><td>rswETH</td><td>0x6b644e825E0E0154b2F6B9fF0CEC0DA527f63269</td></tr><tr><td>rUSD</td><td>0x3000C6BF0AAEb813e252B584c4D9a82f99e7a71D</td></tr><tr><td>sUSDa</td><td>0x5185D57c303f5cB2CF1cFC1F251264f65BA7D534</td></tr><tr><td>sUSDe</td><td>0xA73e05d03E612c41a0b350fCA180c5D5a8Bc884b</td></tr><tr><td>sdeUSD</td><td>0xF2bEa39f04Fb7A8fA4A404F013650f2A4f0b0c57</td></tr><tr><td>srUSD</td><td>0xb9816a01B116d86c8D9A1A4ED4CC644177b8FD67</td></tr><tr><td>stBTC (Botanix)</td><td>0x88d4f1a6529a04d364578685af0F0095a363F79F</td></tr><tr><td>stBTC (Lorenzo)</td><td>0xbE939e5aFB703E4Ff25058A105CA0bf078edEe21</td></tr><tr><td>SBTC (Stakestone)</td><td>0xA8Cb3818Fa799018bc862ADE08F8a37e08BA1062</td></tr><tr><td>SolvBTC</td><td>0xB089044EC7DC233736F98B1a410d3B9e559A7932</td></tr><tr><td>SolvBTC.bbn</td><td>0x9875ec2a91aE0445a3D365C242987D3f7b81C2A4</td></tr><tr><td>STONE</td><td>0x426f6E1a8a8e43A64CcAF651790fA81d077a1017</td></tr><tr><td>sUSDe</td><td>0xA73e05d03E612c41a0b350fCA180c5D5a8Bc884b</td></tr><tr><td>uniBTC</td><td>0xd6eb8ae479EdF452d264493708c85AA798CCCdFd</td></tr><tr><td>USD0</td><td>0x16DC2EAb270C74EBc2B963d1461b54Da98fA113e</td></tr><tr><td>USD0++</td><td>0x529798C3aC58C14cF0f828af94ABc59D5deDb96e</td></tr><tr><td>USD1</td><td>0xB973A7DCBfcF27C726F2112A8C8e7fe610691c99</td></tr><tr><td>USDa</td><td>0x0d1A3CE611CE10b72d4A14DaE2A4443855B6DFc3</td></tr><tr><td>USDe</td><td>0xD628b5aBD6829896134FfdAeeA8393dc531A1Efd</td></tr><tr><td>USDC.e (Arbitrum Only)</td><td>0x107CfC6Ab0776D8C9d452f44A24853Bec87ddBc5</td></tr><tr><td>USDC</td><td>0x444868B6e8079ac2c55eea115250f92C2b2c4D14</td></tr><tr><td>USDT</td><td>0xF2d2d55Daf93b0660297eaA10969eBe90ead5CE8</td></tr><tr><td>WBERA</td><td>0xAa97D791Afc02AF30cf0B046172bb05b3c306517</td></tr><tr><td>WBTC</td><td>0x29cF6e8eCeFb8d3c9dd2b727C1b7d1df1a754F6f</td></tr><tr><td>WETH</td><td>0xf7b5127B510E568fdC39e6Bb54e2081BFaD489AF</td></tr><tr><td>WMNT</td><td>0x3124AEd0a53BDFD29590001140309ADC3b258d8D</td></tr><tr><td>weETH</td><td>0x48282e3B990625CBDcb885E4a4D83B6e9D5C8442</td></tr><tr><td>ylBTCLST</td><td>0x538882fC289F33E87E4b24142CcFB4B8EFba7678</td></tr><tr><td>ylPumpBTC</td><td>0xC6AdB1e9cb781b9573B2cB83809E318D9619BC74</td></tr><tr><td>ylStEth</td><td>0x054AaE186C130006c65A634e0d63EFE3132034FA</td></tr></tbody></table>


# Depositing or Withdrawing

Depositing or withdrawing into Dolomite is easy with the DepositWithdrawalRouter. You can find the address on the Smart Contract Addresses pages.

## Depositing

{% hint style="info" %}
Depositing an asset requires an approval for the corresponding amount on the [DepositWithdrawalRouter](/smart-contract-addresses)
{% endhint %}

<pre class="language-solidity"><code class="lang-solidity">interface IDepositWithdrawalRouter {
    enum EventFlag {
        None,
        Borrow
    }
<strong>    
</strong><strong>    /**
</strong>     * @param _isolationModeMarketId The market ID of the isolation mode token vault 
     *                               (0 if not using isolation mode)
     * @param _toAccountNumber       The account number to deposit into
     * @param _marketId              The ID of the market being deposited
     * @param _amountWei             The amount in Wei to deposit. Use type(uint256).max to deposit
     *                               mgs.sender's entire balance
     * @param _eventFlag             Flag indicating if this deposit should emit
     *                               special events (e.g. opening a borrow position)
     */
    function depositWei(
        uint256 _isolationModeMarketId,
        uint256 _toAccountNumber, 
        uint256 _marketId,
        uint256 _amountWei,
        EventFlag _eventFlag
    ) external;
    
    /**
     * @notice Deposits native ETH by wrapping it to WETH first
     * @param _isolationModeMarketId     The market ID of the isolation mode token vault
     *                                   (0 if not using isolation mode)
     * @param _toAccountNumber           The account number to deposit the wrapped ETH into
     * @param _eventFlag                 Flag indicating if this deposit should emit special
     *                                   events (e.g. opening a borrow position)
     */
    function depositPayable(
        uint256 _isolationModeMarketId,
        uint256 _toAccountNumber,
        EventFlag _eventFlag
    ) external payable;
    
    /**
     * @param _isolationModeMarketId The market ID of the isolation mode token vault
     *                               (0 if not using isolation mode)  
     * @param _toAccountNumber       The account number to deposit into
     * @param _marketId              The ID of the market being deposited
     * @param _amountPar             The amount in Par units to deposit
     * @param _eventFlag             Flag indicating if this deposit should emit special
     *                               events (e.g. opening a borrow position)
     */
    function depositPar(
        uint256 _isolationModeMarketId,
        uint256 _toAccountNumber,
        uint256 _marketId, 
        uint256 _amountPar,
        EventFlag _eventFlag
    ) external;
}
</code></pre>

### Examples

\
Depositing 1 WETH into the default account number (account number = 0):

```solidity
WETH.safeApprove(address(DepositWithdrawalRouter), 1 ether);

uint256 marketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(WETH));
DepositWithdrawalRouter.depositWei(
    /* isolationModeMarketId = */ 0,
    /* toAccountNumber = */ 0,
    marketId,
    /* amountWei = */ 1 ether,
    EventFlag.None
);    
```

Depositing 1 WETH into account number 123 of a GLP isolation mode vault via deposit payable:

```solidity
address dfsGlp = 0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698;
uint256 marketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(dfsGlp);
DepositWithdrawalRouter.depositPayable{ value: 1 ether }(
    /* isolationModeMarketId = */ marketId,
    /* toAccountNumber = */ 123,
    EventFlag.None
);    
```

Depositing 1 GLP, an isolation mode asset, into the default account number:

{% hint style="info" %}
For isolation mode vaults, only the underlying token can be deposited into account number 0. All other assets must be deposited into account numbers ≥ 100.
{% endhint %}

```solidity
GLP.safeApprove(address(DepositWithdrawalRouter), 1 ether);

// The token address will be the Dolomite DFSGLP factory address, NOT the glp address
address dfsGlp = 0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698;
uint256 marketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(dfsGlp); 
DepositWithdrawalRouter.depositWei(
    /* isolationModeMarketId = */ marketId,
    /* toAccountNumber = */ 0,
    marketId,
    /* amountWei = */ 1 ether,
    EventFlag.None
);
```

Depositing 100 USDC into account number 123 for a GLP isolation mode token vault:

```solidity
USDC.safeApprove(address(DepositWithdrawalRouter), 100e6);

// isolationModeMarketId will be the GLP market id
address dfsGlp = 0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698;
uint256 glpMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(dfsGlp);

// marketId will be the USDC market id
uint256 usdcMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(USDC));
DepositWithdrawalRouter.depositWei(
    /* isolationModeMarketId = */ glpMarketId,
    /* toAccountNumber = */ 123,
    /* marketId = */ usdcMarketId,
    /* amountWei = */ 100e6,
    EventFlag.None
);
```

## Withdrawing

{% hint style="info" %}
For isolation mode, the underlying asset can only be withdrawn from account number 0 (default account number). All other assets can only be deposited/withdrawn from account numbers ≥ 100.
{% endhint %}

{% hint style="warning" %}
Withdrawing more than your supplied balance (to a negative number) will put you in a borrowed state. You can use the `AccountBalanceLib.BalanceCheckFlag` to protect your balance from going negative.
{% endhint %}

{% hint style="warning" %}
Your withdrawal may fail if you attempt to withdraw more liquidity than there is available in Dolomite. If this happens, you must wait until more liquidity becomes available or you can attempt to swap your virtual balance to another asset that is withdrawable.
{% endhint %}

```solidity
library AccountBalanceLib {
    /// Checks that either BOTH, FROM, or TO accounts do not have negative balances
    enum BalanceCheckFlag {
        Both,
        From,
        To,
        None
    }
}

/**
 * @param _isolationModeMarketId The market ID of the isolation mode token vault
 *                               (0 if not using isolation mode)
 * @param _fromAccountNumber     The account number to withdraw from
 * @param _marketId              The ID of the market being withdrawn
 * @param _amountWei             The amount in Wei to withdraw. Use type(uint256).max
 *                               to withdraw entire balance
 * @param _balanceCheckFlag      Flag indicating how to validate account balances after
 *                               withdrawal
 */
function withdrawWei(
    uint256 _isolationModeMarketId,
    uint256 _fromAccountNumber,
    uint256 _marketId,
    uint256 _amountWei,
    AccountBalanceLib.BalanceCheckFlag _balanceCheckFlag
) external;

/**
 * @notice Withdraws WETH and unwraps it to native ETH
 * @param _isolationModeMarketId The market ID of the isolation mode token vault
 *                               (0 if not using isolation mode)
 * @param _fromAccountNumber     The account number to withdraw from
 * @param _amountWei             The amount of WETH in Wei to withdraw and unwrap
 * @param _balanceCheckFlag      Flag indicating how to validate account balances after
 *                               withdrawal
 */
function withdrawPayable(
    uint256 _isolationModeMarketId,
    uint256 _fromAccountNumber,
    uint256 _amountWei,
    AccountBalanceLib.BalanceCheckFlag _balanceCheckFlag
) external;

/**
 * @param _isolationModeMarketId The market ID of the isolation mode token vault
 *                               (0 if not using isolation mode)
 * @param _fromAccountNumber     The account number to withdraw from
 * @param _marketId              The ID of the market being withdrawn
 * @param _amountPar             The amount in Par units to withdraw
 * @param _balanceCheckFlag      Flag indicating how to validate account balances after
 *                               withdrawal
 */
function withdrawPar(
    uint256 _isolationModeMarketId,
    uint256 _fromAccountNumber,
    uint256 _marketId,
    uint256 _amountPar,
    AccountBalanceLib.BalanceCheckFlag _balanceCheckFlag
) external;
```

### Examples

\
Withdrawing 1 WETH from the default account number (account number = 0):

<pre class="language-solidity"><code class="lang-solidity"><strong>uint256 marketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(WETH));
</strong>DepositWithdrawalRouter.withdrawWei(
    /* isolationModeMarketId = */ 0,
    /* fromAccountNumber = */ 0,
    /* marketId = */ marketId,
    /* amountWei = */ 1 ether,
    EventFlag.None
);  
</code></pre>

Withdrawing 1 WETH as ETH from the default account number (account number = 0):

```solidity
DepositWithdrawalRouter.withdrawPayable(
    /* isolationModeMarketId = */ 0,
    /* fromAccountNumber = */ 0,
    /* amountWei = */ 1 ether,
    EventFlag.None
); 
```

Withdrawing 1 GLP, an isolation mode asset, from the default account:

```solidity
// The token address will be the Dolomite DFSGLP factory address, NOT the glp address
address dfsGlp = 0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698;
uint256 marketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(dfsGlp); 
DepositWithdrawalRouter.withdrawWei(
    /* fromAccountNumber = */ 0,
    /* marketId = */ marketId,
    /* amountWei = */ 1 ether,
    EventFlag.None
);
```

Withdrawing 1 WETH from account number 123 of a GLP isolation mode token vault:

```solidity
// The token address will be the Dolomite DFSGLP factory address, NOT the glp address
address dfsGlp = 0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698;
uint256 glpMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(dfsGlp);
uint256 wethMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(WETH));
DepositWithdrawalRouter.withdrawWei(
    /* isolationModeMarketId = */ glpMarketId
    /* fromAccountNumber = */ 123,
    /* marketId = */ wethMarketId,
    /* amountWei = */ 1 ether,
    EventFlag.From
);
```


# Managing Borrow Positions

Moving assets between positions and opening/closing borrow positions is easy with the BorrowPositionRouter. You can find the address on the Smart Contract Addresses page.

## Transferring Assets

```solidity
library AccountBalanceLib {
    /// Checks that either BOTH, FROM, or TO accounts do not have negative balances
    enum BalanceCheckFlag {
        Both,
        From,
        To,
        None
    }
}

interface IBorrowPositionRouter {
    /**
     * @param _isolationModeMarketId    The market ID of the isolation mode token
     *                                  (0 if not using isolation mode)
     * @param _fromAccountNumber        The source account number
     * @param _toAccountNumber          The destination account number
     * @param _marketId                 The ID of the market to transfer
     * @param _amount                   The amount to transfer
     * @param _balanceCheckFlag         Flag indicating how to validate account balances
     */
    function transferBetweenAccounts(
        uint256 _isolationModeMarketId,
        uint256 _fromAccountNumber,
        uint256 _toAccountNumber,
        uint256 _marketId,
        uint256 _amount,
        AccountBalanceLib.BalanceCheckFlag _balanceCheckFlag
    ) external;
}
```

This function is used to transfer assets between accounts. For non-isolation mode assets, set the `isolationModeMarketId` to 0 and fill in the rest of the necessary information. For isolation-mode assets, `isolationModeMarketId` is the market ID of the vault and `marketId` is the market ID of the asset that will be transferred.

For isolation-mode transfers, we restrict transfers in the following ways:

* The underlying isolation mode asset can only be transferred between the default account number and a non-default account number. For example, transferring from account number 0 to account number 123 is valid, but transferring from account number 123 to account number 150 would revert.
* For all other assets within an isolation mode vault position, transfers can go from the owner to the vault or from the vault back to the owner. Transfers cannot be made within the vault. The direction of the transfer is determined by the `fromAccountNumber` and the `toAccountNumber`. If the `fromAccountNumber` is `< 100` and the `toAccoutNumber` is `>= 100`, funds will go from the user's account to the isolation mode vault. If the `fromAccountNumber` is `>= 100` and the `toAccountNumber` is `< 100`, funds will go from the isolation mode vault to the user's account.

### Examples

Transferring 100 USDC from user's account number 0 to user's account number 123 while confirming that account number 0 does not go negative:

```solidity
uint256 usdcMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(usdc));

BorrowPositionRouter.transferBetweenAccounts(
    /* _isolationModeMarketId = */ 0,
    /* _fromAccountNumber = */ 0,
    /* _toAccountNumber = */ 123,
    /* _marketId = */ usdcMarketId,
    /* _amount = */ 100e6,
    /* _balanceCheckFlag = */ BalanceCheckFlag.From
);
```

Transferring 100 GLP from the isolation mode vault default account to account number 123:

```solidity
address dfsGlp = 0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698;
uint256 marketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(dfsGlp); 
BorrowPositionRouter.transferBetweenAccounts(
    /* _isolationModeMarketId = */ marketId,
    /* _fromAccountNumber = */ 0,
    /* _toAccountNumber = */ 123,
    /* _marketId = */ marketId,
    /* _amount = */ 100 ether,
    /* _balanceCheckFlag = */ BalanceCheckFlag.From
);
```

Transferring 100 USDC from the user's account number 0 to their isolation mode account number 123:

```solidity
uint256 usdcMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(usdc));
address dfsGlp = 0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698;
uint256 glpMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(dfsGlp);
 
BorrowPositionRouter.transferBetweenAccounts(
    /* _isolationModeMarketId = */ glpMarketId,
    /* _fromAccountNumber = */ 0,
    /* _toAccountNumber = */ 123,
    /* _marketId = */ usdcMarketId,
    /* _amount = */ 100e6,
    /* _balanceCheckFlag = */ BalanceCheckFlag.None
);
```

Transferring 100 USDC from isolation mode account number 123 to the user's account number 0 while confirming that account number 123 does not go negative:

```solidity
uint256 usdcMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(usdc));
address dfsGlp = 0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698;
uint256 glpMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(dfsGlp);
 
BorrowPositionRouter.transferBetweenAccounts(
    /* _isolationModeMarketId = */ glpMarketId,
    /* _fromAccountNumber = */ 123,
    /* _toAccountNumber = */ 0,
    /* _marketId = */ usdcMarketId,
    /* _amount = */ 100e6,
    /* _balanceCheckFlag = */ BalanceCheckFlag.From
);
```

## Opening a Borrow Position

```solidity
library AccountBalanceLib {
    /// Checks that either BOTH, FROM, or TO accounts do not have negative balances
    enum BalanceCheckFlag {
        Both,
        From,
        To,
        None
    }
}

interface IBorrowPositionRouter {
    /**
     * @param _fromAccountNumber    The account number to transfer assets from
     * @param _toAccountNumber      The account number for the new borrow position
     * @param _marketId             The ID of the market to transfer collateral
     * @param _amount               The amount of collateral to transfer into the borrow
     *                              position
     * @param _balanceCheckFlag     Flag indicating how to validate account balances
     */
    function openBorrowPosition(
        uint256 _fromAccountNumber,
        uint256 _toAccountNumber,
        uint256 _marketId,
        uint256 _amount,
        AccountBalanceLib.BalanceCheckFlag _balanceCheckFlag
    ) external;
}
```

### Examples

A user has 10 WETH in their default account (account number 0) and they want to open a borrow position with 1 WETH as collateral and then borrow 100 USDC against it.

```solidity
uint256 usdcMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(usdc));
uint256 wethMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(weth));

// This call to openBorrowPosition will transfer 1 WETH from account number 0
// to account number 123.
BorrowPositionRouter.openBorrowPosition(
    /* _fromAccountNumber = */ 0,
    /* _toAccountNumber = */ 123,
    /* _marketId = */ wethMarketId,
    /* _amount = */ 1 ether,
    /* _balanceCheckFlag = */ BalanceCheckFlag.From
);

// This call to transferBetweenAccounts will transfer 100 USDC from account number
// 123 to account number 0. Account number 123 will now have 1 WETH and -100 USDC
BorrowPositionRouter.transferBetweenAccounts(
    /* _isolationModeMarketId = */ 0,
    /* _fromAccountNumber = */ 123,
    /* _toAccountNumber = */ 0,
    /* _marketId = */ usdcMarketId,
    /* _amount = */ 100e6,
    /* _balanceCheckFlag = */ BalanceCheckFlag.To
);
```

A user has 10 GLP in their default isolation mode account and they want to open a borrow position with 1 GLP as collateral and borrow 100 USDC against it.

```solidity
uint256 usdcMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(usdc));
address dfsGlp = 0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698;
uint256 glpMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(dfsGlp);

// This call to openBorrowPosition will transfer 1 GLP from account number 0
// to account number 123.
BorrowPositionRouter.openBorrowPosition(
    /* _fromAccountNumber = */ 0,
    /* _toAccountNumber = */ 123,
    /* _marketId = */ glpMarketId,
    /* _amount = */ 1 ether,
    /* _balanceCheckFlag = */ BalanceCheckFlag.From
);

// This call to transferBetweenAccounts will transfer 100 USDC from account number
// 123 of the isolation mode vault to account number 0 for the user. 
// Account number 123 of the isolation mode vault will have 1 GLP and -100 USDC
// Account number 0 for the user will have +100 USDC
BorrowPositionRouter.transferBetweenAccounts(
    /* _isolationModeMarketId = */ glpMarketId,
    /* _fromAccountNumber = */ 123,
    /* _toAccountNumber = */ 0,
    /* _marketId = */ usdcMarketId,
    /* _amount = */ 100e6,
    /* _balanceCheckFlag = */ BalanceCheckFlag.To
);
```

## Closing a Borrow Position

```solidity
library AccountBalanceLib {
    /// Checks that either BOTH, FROM, or TO accounts do not have negative balances
    enum BalanceCheckFlag {
        Both,
        From,
        To,
        None
    }
}

interface IBorrowPositionRouter {
    /**
     * @param _isolationModeMarketId    The market ID of the isolation mode token (0 if not using isolation mode)
     * @param _fromAccountNumber        The account number containing repayment funds
     * @param _borrowAccountNumber      The account number containing the borrow position
     * @param _marketId                 The ID of the market to repay
     * @param _balanceCheckFlag         Flag indicating how to validate account balances
     */
    function repayAllForBorrowPosition(
        uint256 _isolationModeMarketId,
        uint256 _fromAccountNumber,
        uint256 _borrowAccountNumber,
        uint256 _marketId,
        AccountBalanceLib.BalanceCheckFlag _balanceCheckFlag
    ) external;
    
    /**
     * @param _isolationModeMarketId  The market ID of the isolation mode token
     *                                (0 if not using isolation mode)
     * @param _borrowAccountNumber    The account number containing the borrow position
     * @param _toAccountNumber        The account number to send remaining collateral to
     * @param _collateralMarketIds    Array of market IDs for collateral to be returned
     */
    function closeBorrowPosition(
        uint256 _isolationModeMarketId,
        uint256 _borrowAccountNumber,
        uint256 _toAccountNumber,
        uint256[] calldata _collateralMarketIds
    ) external;
}

```

### Examples

Continuing from the example above where a user has 1 WETH collateral in account number 123 and borrowed 100 USDC. The user will now pay back the 100 USDC from account number 0 and close the borrow position.

```solidity
uint256 usdcMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(usdc));
uint256 wethMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(weth));

// This call to openBorrowPosition will transfer 1 WETH from account number 0
// to account number 123.
BorrowPositionRouter.openBorrowPosition(
    /* _fromAccountNumber = */ 0,
    /* _toAccountNumber = */ 123,
    /* _marketId = */ wethMarketId,
    /* _amount = */ 1 ether,
    /* _balanceCheckFlag = */ BalanceCheckFlag.From
);

// This call to transferBetweenAccounts will transfer 100 USDC from account number
// 123 to account number 0. Account number 123 will have 1 WETH and -100 USDC
BorrowPositionRouter.transferBetweenAccounts(
    /* _isolationModeMarketId = */ 0,
    /* _fromAccountNumber = */ 123,
    /* _toAccountNumber = */ 0,
    /* _marketId = */ usdcMarketId,
    /* _amount = */ 100e6,
    /* _balanceCheckFlag = */ BalanceCheckFlag.To
);

// This call will transfer 100 USDC from account number 0 to account number 123
// to pay back the loan. In reality, it would be greater than 100 because interest
BorrowPositionRouter.repayAllForBorrowPosition(
    /* isolationModeMarketId = */ 0,
    /* fromAccountNumber = */ 0,
    /* borrowAccountNumber = */ 123,
    /* marketId = */ usdcMarketId,
    /* balanceCheckFlag = */ BalanceCheckFlag.From
);

// This call will close the borrow position and transfer the 1 WETH of collateral
// back to account number 0
BorrowPositionRouter.closeBorrowPosition(
    /* isolationModeMarketId = */ 0,
    /* borrowAccountNumber = */ 123,
    /* toAccountNumber = */ 0,
    /* collateralMarketIds = */ [wethMarketId],
);
```


# Zapping Assets

Swapping assets is easy with the GenericTraderRouter. You can find the address for the router on the Smart Contract Addresses page.

<pre class="language-solidity"><code class="lang-solidity"><strong>library AccountBalanceLib {
</strong><strong>    enum BalanceCheckFlag {
</strong><strong>        Both,
</strong><strong>        From,
</strong><strong>        To,
</strong><strong>        None
</strong><strong>    }
</strong><strong>}
</strong><strong>
</strong><strong>interface IDolomiteStructs {
</strong><strong>    struct AccountInfo {
</strong><strong>        address owner;
</strong><strong>        uint256 number;
</strong><strong>    }
</strong><strong>}
</strong><strong>
</strong><strong>interface IGenericTraderBase {  
</strong>    enum TraderType {
        ExternalLiquidity,
        InternalLiquidiy,
        IsolationModeUnwrapper,
        IsolationModeWrapper
    }
    
    struct TraderParam {
        TraderType traderType;
        uint256 makerAccountIndex;
        address trader;
        bytes tradeData;
    }
}

interface IGenericTraderProxyV2 {
    enum EventEmissionType {
        None,
        BorrowPosition,
        MarginPosition
    }
    
    struct TransferAmount {
        uint256 marketId;
        uint256 amountWei;
    }

    struct TransferCollateralParam {
        uint256 fromAccountNumber;
        uint256 toAccountNumber;
        TransferAmount[] transferAmounts;
    }
    
    struct UserConfig {
        uint256 deadline;
        AccountBalanceLib.BalanceCheckFlag balanceCheckFlag;
        EventEmissionType eventType;
    }
    
    struct ExpiryParam {
        uint256 marketId;
        uint32 expiryTimeDelta;
    }
    
    struct SwapExactInputForOutputParams {
        uint256 accountNumber;
        uint256[] marketIdsPath;
        uint256 inputAmountWei;
        uint256 minOutputAmountWei;
        TraderParam[] tradersPath;
        IDolomiteMargin.AccountInfo[] makerAccounts;
        UserConfig userConfig;
    }
    
    struct SwapExactInputForOutputAndModifyPositionParams {
        uint256 accountNumber;
        uint256[] marketIdsPath;
        uint256 inputAmountWei;
        uint256 minOutputAmountWei;
        TraderParam[] tradersPath;
        IDolomiteStructs.AccountInfo[] makerAccounts;
        TransferCollateralParam transferCollateralParams;
        ExpiryParam expiryParams;
        UserConfig userConfig;
    }
}

interface IGenericTraderRouter {
    /**
     * @param _isolationModeMarketId Market ID of isolation mode token (0 if not using isolation mode)
     * @param _params                Trading parameters including:
     *                              - accountNumber: Account to trade from
     *                              - marketIdsPath: Array of market IDs for trading path
     *                              - inputAmountWei: Amount to swap (uint(-1) for entire balance)
     *                              - minOutputAmountWei: Minimum output amount
     *                              - tradersPath: Array of traders to use
     *                              - makerAccounts: Accounts for internal liquidity trades
     *                              - userConfig: Deadline, balance checks, and event config
     */
    function swapExactInputForOutput(
        uint256 _isolationModeMarketId,
        SwapExactInputForOutputParams memory _params
    ) external;
    
    /**
     * @param _isolationModeMarketId Market ID of isolation mode token (0 if not using isolation mode)
     * @param _params                Trading parameters including:
     *                              - All parameters from SwapExactInputForOutputParams
     *                              - transferCollateralParams: Collateral transfer config
     *                              - expiryParams: Position expiry settings
     */
    function swapExactInputForOutputAndModifyPosition(
        uint256 _isolationModeMarketId,
        SwapExactInputForOutputAndModifyPositionParams memory _params
    ) external;

}
</code></pre>

### Examples

{% hint style="info" %}
For these examples, we are creating the structs and arrays directly inline to make it more readable. This would result in a compile error in normal solidity.\
\
Also, the tradeData is dependent on which trader you are using.
{% endhint %}

Depositing 1,000 USDC into the default account number and then swapping for WETH.

```solidity
uint256 usdcAmount = 1000e6;
usdc.safeApprove(address(DepositWithdrawalRouter), usdcAmount);

uint256 usdcMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(usdc));
DepositWithdrawalRouter.depositWei(
    /* isolationModeMarketId = */ 0,
    /* toAccountNumber = */ 0,
    /* marketId = */ usdcMarketId,
    /* amountWei = */ usdcAmount,
    EventFlag.None
);

uint256 wethMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(weth));
uint256 minAmountOut = 0.25 ether;
bytes memory odosOrderData = '0x1234';
GenericTraderRouter.swapExactInputForOutput(
    /* isolationModeMarketId = */ 0,
    /* SwapExactInputForOutputParams */ {
        /* accountNumber = */ 0,
        /* marketIdsPath = */ [usdcMarketId, wethMarketId],
        /* inputAmountWei = */ usdcAmount,
        /* minOutputAmountWei = */ minAmountOut,
        /* tradersPath = */ [{
            /* trader = */ odosExchangeRouterAddress,
            /* traderType = */ GenericTraderType.ExternalLiquidity,
            /* tradeData = */ abi.encode(minAmountOut, odosOrderData),
            /* makerAccountIndex = */ 0
        }],
        /* makerAccounts = */ [],
        /* userConfig = */ {
            /* deadline = */ block.timestamp,
            /* balanceCheckFlag = */ BalanceCheckFlag.From,
            /* eventType = */ GenericEventEmissionType.None
        }
    }
);
```

Depositing 1,000 USDC into the user's default account and swapping into GLP, an isolation mode asset. Swapping into an isolation mode asset requires using a whitelisted wrapper trader and swapping out of an isolation mode asset requires using a whitelisted unwrapper trader.

{% hint style="info" %}
tradeData is in the format of (uint256 minAmountOut, bytes memory extraOrderData) = abi.decode(tradeData, (uint256, bytes)). The GLP wrapper requires no extra order data, but many traders require extra information.
{% endhint %}

```solidity
uint256 usdcAmount = 1000e6;
usdc.safeApprove(address(DepositWithdrawalRouter), usdcAmount);

uint256 usdcMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(usdc));
DepositWithdrawalRouter.depositWei(
    /* isolationModeMarketId = */ 0,
    /* toAccountNumber = */ 0,
    usdcMarketId,
    /* amountWei = */ usdcAmount,
    EventFlag.None
);

address dfsGlp = 0x34DF4E8062A8C8Ae97E3382B452bd7BF60542698;
uint256 glpMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(dfsGlp);
uint256 minAmountOut = 0.25 ether;
GenericTraderRouter.swapExactInputForOutput(
    /* isolationModeMarketId = */ glpMarketId,
    /* SwapExactInputForOutputParams */ {
        /* accountNumber = */ 0,
        /* marketIdsPath = */ [usdcMarketId, glpMarketId],
        /* inputAmountWei = */ usdcAmount,
        /* minOutputAmountWei = */ minAmountOut,
        /* tradersPath = */ [{
            /* trader = */ glpWrapperTraderAddress,
            /* traderType = */ GenericTraderType.IsolationModeWrapper,
            /* tradeData = */ abi.encode(minAmountOut, bytes("")),
            /* makerAccountIndex = */ 0
        }],
        /* makerAccounts = */ [],
        /* userConfig = */ {
            /* deadline = */ block.timestamp,
            /* balanceCheckFlag = */ BalanceCheckFlag.From,
            /* eventType = */ GenericEventEmissionType.None
        }
    }
);
```


# Flash Loans

Dolomite offers free access to flash loans for any market that is not in Isolation Mode.

Flash Loans are a type of short-term, uncollateralized loan that allows users to borrow a significant amount of assets without the need for providing collateral upfront. Flash Loans are a unique feature of certain DeFi platforms and are made possible through the composability and programmability of smart contracts.

Here's how Flash Loans work:

1. **Borrowing and Repayment in a Single Transaction:** A user can borrow a certain amount of assets, often referred to as the "loan principal," within a single blockchain transaction. This borrowed amount is typically much larger than the user's account balance.
2. **Usage Within a Single Transaction:** The user is required to use the borrowed assets within the same transaction. This ensures that the assets are utilized for specific purposes, such as arbitrage, collateral swapping, or other sophisticated trading strategies.
3. **No Collateral Required:** Flash Loans do not require the borrower to provide any collateral upfront. Instead, the borrower commits to returning the borrowed amount, along with a fee (interest), within the same transaction. If the borrower fails to repay the loan within the same transaction, the entire transaction is reverted, ensuring that the protocol's funds are not at risk.
4. **Arbitrage and Trading Opportunities:** Flash Loans are commonly used for taking advantage of price discrepancies between different markets. Borrowers can quickly execute trades or other financial operations to exploit these opportunities and repay the loan, all within the same transaction.
5. **Conditional Execution:** The transaction containing the Flash Loan is only executed if the conditions for borrowing and repayment are met. If the conditions are not met, the entire transaction is reversed, effectively canceling the loan and preventing any risk to the protocol.

Flash Loans offer a powerful tool for executing complex strategies in DeFi, allowing users to access a substantial amount of capital for a short period without the need for collateral. However, they also require careful planning and execution, as the borrowed funds must be used within the same transaction to ensure successful repayment.

## How to execute a Flash Loan with Dolomite?

You can use any balance-changing [Action](/developer-documentation/dolomite-margin-glossary#actions), like [Withdraw](/developer-documentation/dolomite-margin-glossary#withdraw), [Transfer](/developer-documentation/dolomite-margin-glossary#transfer), [Buy](/developer-documentation/dolomite-margin-glossary#buy), [Sell](/developer-documentation/dolomite-margin-glossary#sell), or [Trade](/developer-documentation/dolomite-margin-glossary#trade) that pushes your balance negative and uncollateralized, as long as the account that executes the [Operation](/developer-documentation/dolomite-margin-glossary#operations) is overcollateralized when the Operation finishes executing.

Thus, there is no specific interface to implement and there are no origination fees to be paid in order to execute a flash loan.


# E-Mode & Segregated Risk

Dolomite's risk override system empowers users to borrow against assets with increased LTVs or modified risk parameters to partition risk and maximize underwriting potential.

{% hint style="warning" %}
This feature is not available on Arbitrum
{% endhint %}

E-Mode & Segregated Risk automatically turns on/off depending on the composition of assets in your position. This makes it easy and fluid for users to borrow with increased efficiency if they opt into maintaining a position that falls within an E-Mode category.

To learn more about E-Mode you can visit the section on [Risk Management](/risk-management#account-risk-override).

To get the current risk override setter, you can query the [following function](/developer-documentation/dolomite-margin-getters#getdefaultaccountriskoverridesetter) on `DolomiteMargin` .

You can query current risk settings on the Dolomite Account Risk Override using the following functions:

### `getAccountRiskOverride`

**Description:**

Gets the risk overrides for a given account owner. In the context of an operation, this function is called within `_verifyFinalState`, after all of the operation's actions have occurred. Thus, it is safe to read the account's state from Dolomite Margin's storage.

**Parameters:**

* `account` (`Account.Info calldata`): The account whose risk override should be retrieved, represented by an `Account.Info` struct.

**Returns:**

* `Decimal.D256 memory marginRatioOverride`: The margin ratio override for this account. When a margin ratio override is specified that is non-zero, all margin premiums are ignored for the position.
* `Decimal.D256 memory liquidationRewardOverride`: The liquidation penalty that would be paid by this account if the position is liquidated. When a liquidation reward override is specified that is non-zero, all liquidation reward premiums are ignored for the position.

```solidity
library Account {
    struct Info {
        address owner;
        uint256 number;
    }
}

library Decimal {
    struct D256 {
        value uint256;
    }
}

function getAccountRiskOverride(
    Account.Info calldata account
)
external
view
returns
(
    Decimal.D256 memory marginRatioOverride,
    Decimal.D256 memory liquidationRewardOverride
);
```


# TypeScript Client

TypeScript library for interacting with the DolomiteMargin smart contracts.

[![GitHub](https://img.shields.io/badge/GitHub-dolomite--exchange%2Fdolomite--margin-lightgrey)](https://github.com/dolomite-exchange/dolomite-margin)

## Install <a href="#install" id="install"></a>

```shell
npm i -s @dolomite-exchange/dolomite
```

or with `yarn`

```sh
yarn add @dolomite-exchange/dolomite
```

## Initialize <a href="#initialize" id="initialize"></a>

You will need to initialize DolomiteMargin using a [Web3 provider](https://web3js.readthedocs.io/en/v1.2.1/web3.html#providers) / Web3 node endpoint and Network.

```typescript
import { DolomiteMargin, Networks } from '@dolomite-exchange/dolomite-margin';

// --- Initialize with Web3 provider ---
const dolomiteMargin = new DolomiteMargin(
  provider,  // Valid web3 provider
  Networks.ARBITRtUM,
  {
    defaultAccount: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1', // Optional
    accounts: [
      {
        address: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1', // Optional
        privateKey: '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d',
      },
    ], // Optional: loading in an account for signing transactions
  }, // Optional
);

// --- OR Initialize with Web3 Provider node endpoint ---
const dolomiteMargin = new DolomiteMargin(
  'https://arbitrum-mainnet.infura.io/v3/YOUR-PROJECT-ID',
  Networks.ARBITRUM,
  {
    defaultAccount: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1', // Optional - but needed if using Infura
    accounts: [
      {
        address: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1', // Optional
        privateKey: '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d',
      },
    ], // Optional: loading in an account for signing transactions
  }, // Optional
);
```

## Standard Actions <a href="#standard-actions" id="standard-actions"></a>

DolomiteMargin exposes a number of "standard" actions for interacting with the protocol. These are a subset of what is possible with [Operations](https://docs.dolomite.io/#/typescript?id=operations), but are simpler to use.

### **Deposit**

Deposit funds to DolomiteMargin

```typescript
import { MarketId, BigNumber } from '@dolomite-exchange/dolomite-margin';

// Deposits a certain amount of tokens for some asset.
// By default resolves when transaction is received by the node - not when mined
const result = await dolomiteMargin.standardActions.deposit({
  accountOwner: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5', // Your address
  marketId: MarketId.ETH,

  // Base units of the token, so 1e18 = 1 ETH
  // NOTE: USDC has 6 decimal places, so 1e6 = 1 USDC
  amount: new BigNumber('1e18'),
});
```

* `MarketId.ETH` will send ETH whereas `MarketId.WETH` will send WETH. Both are the same market on the protocol
* For all markets except `MarketId.ETH`, you will first need to set allowance on that token. See [Tokens](https://docs.dolomite.io/#/typescript?id=tokens)

### **Withdraw**

Withdraw funds from DolomiteMargin

```typescript
import { MarketId, BigNumber } from '@dolomite-exchange/dolomite-margin';

// Withdraws a certain amount of tokens for some asset.
// By default resolves when transaction is received by the node - not when mined
const result = await dolomiteMargin.standardActions.withdraw({
  accountOwner: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5', // Your address
  marketId: MarketId.ETH,

  // Base units of the token, so 1e18 = 1 ETH
  // NOTE: USDC has 6 decimal places, so 1e6 = 1 USDC
  amount: new BigNumber('1e18'),
});

// Withdraws all of your tokens for some asset.
// By default resolves when transaction is received by the node - not when mined
const result = await dolomiteMargin.standardActions.withdrawToZero({
  accountOwner: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5', // Your address
  marketId: MarketId.ETH,
});
```

* `MarketId.ETH` will withdraw as ETH whereas `MarketId.WETH` will withdraw as WETH. Both are the same market on the protocol

## Operations <a href="#operations" id="operations"></a>

The main way to interact with DolomiteMargin is through Operations. See [Operations](/developer-documentation/dolomite-margin-glossary#operations).

### **Initialize**

To initialize an Operation:

```typescript
const operation = dolomiteMargin.operation.initiate();
```

DolomiteMargin also provides a [Payable Proxy](https://github.com/dolomite-exchange/dolomite-margin/blob/master/contracts/external/proxies/PayableProxy.sol) contract that will automatically wrap and unwrap ETH <-> WETH, so that users can interact with DolomiteMargin using only ETH. You can use it by:

```typescript
const operation = dolomiteMargin.operation.initiate({ proxy: ProxyType.Payable });
```

### **Add Actions**

Once an operation is initialized, Actions can be added to it. Action functions modify the `operation` itself, and also always return the `operation`.

In this example 1 ETH is being withdrawn from an account, and then 200 DAI are being deposited into it:

```typescript
import { MarketId } from '@dolomite-exchange/dolomite-margin';

operation.withdraw({
  primaryAccountOwner: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5',
  primaryAccountId: new BigNumber('123456'),
  marketId: MarketId.WETH,
  amount: {
    value: new BigNumber('-1e18'),
    reference: AmountReference.Delta,
    denomination: AmountDenomination.Actual,
  },
  to: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5'
})ty
  .deposit({
    primaryAccountOwner: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5',
    primaryAccountId: new BigNumber('123456'),
    marketId: MarketId.DAI,
    amount: {
      value: new BigNumber('200e18'),
      reference: AmountReference.Delta,
      denomination: AmountDenomination.Actual,
    },
    from: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5',
  });
```

See [AccountOperation](https://github.com/dolomite-exchange/dolomite-margin/blob/master/src/modules/operate/AccountOperation.ts) for the full list of Actions available to add to an Operation.

### **Commit**

After Actions have been added to the `operation`, it can be committed. This is what sends the transaction to the blockchain to execute the Operation on the protocol.

```typescript
const response = await operation.commit({
  from: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5',
  gasPrice: '1000000000',
  confirmationType: ConfirmationType.Confirmed,
});
```

## Getters <a href="#getters" id="getters"></a>

DolomiteMargin provides a number of read-only getter functions which read information off the smart contracts on the blockchain. You can find them [here](https://github.com/dolomite-exchange/dolomite-margin/blob/master/src/modules/Getters.ts).

Example of getting the balances of an Account:

```typescript
const balances = await dolomiteMargin.getters.getAccountBalances(
  '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359', // Account Owner
  new BigNumber('11'), // Account Number
);
```

## Logs <a href="#logs" id="logs"></a>

DolomiteMargin provides a helper to parse DolomiteMargin-specific logs from a transaction.

```typescript
const dolomiteMarginLogs = dolomiteMargin.logs.parseLogs(transactionReceipt);
```

## Tokens <a href="#tokens" id="tokens"></a>

DolomiteMargin provides helper functions to help with interacting with ERC20 tokens. You can find them all [here](https://github.com/dolomite-exchange/dolomite-margin/blob/master/src/modules/Token.ts).

Example of setting DAI token allowance on DolomiteMargin:

```typescript
await dolomiteMargin.token.setMaximumDolomiteMarginAllowance(
  '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359', // DAI Contract Address
  '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5', // My Address
  { from: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5' }, // My Address
);
```

## Types <a href="#types" id="types"></a>

You can import types from DolomiteMargin as:

```typescript
import {
  AmountDenomination,
  AmountReference,
  ConfirmationType,
} from '@dolomite-exchange/dolomite-margin';
```

## Web3 <a href="#web3" id="web3"></a>

DolomiteMargin uses [Web3 1.2.X](https://web3js.readthedocs.io/) under the hood. You can access it through `dolomiteMargin.web3`

## BigNumber <a href="#bignumber" id="bignumber"></a>

DolomiteMargin uses [BigNumber 8.X](http://mikemcl.github.io/bignumber.js/). You can import this from DolomiteMargin as:

```javascript
import { BigNumber } from '@dolomite-exchange/dolomite-margin';
```


# Subgraph

Dolomite's subgraphs are essential for indexing the state of the protocol.

Dolomite has published subgraphs on each network that `Dolomite Margin Core` is deployed.

<table><thead><tr><th width="227">Network</th><th>URL</th></tr></thead><tbody><tr><td>Arbitrum One</td><td><a href="https://thegraph.com/hosted-service/subgraph/dolomite-exchange/dolomite-v2-arbitrum">https://thegraph.com/hosted-service/subgraph/dolomite-exchange/dolomite-v2-arbitrum</a></td></tr><tr><td>Arbitrum Goerli</td><td><a href="https://thegraph.com/hosted-service/subgraph/dolomite-exchange/dolomite-v2-arbitrum-goerli">https://thegraph.com/hosted-service/subgraph/dolomite-exchange/dolomite-v2-arbitrum-goerli</a></td></tr></tbody></table>


