Risk Mitigation

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 about joining the program.

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

Market IDSymbolOracle Address

0

WETH

1

DAI

2

USDC.e

3

LINK

4

WBTC

5

USDT

6

GLP

7

ARB

8

magicGLP

9

plvGLP

10

jUSDC

11

PT-GLP (Mar 2024)

12

UNI

13

MIM

14

wstETH

15

rETH

16

YT-GLP (Mar 2024)

17

USDC

18

GRAIL

19

MAGIC

20

DPX

21

PENDLE

22

PT-rETH (Jun 2025)

23

PT-wstETH (Jun 2024)

24

PT-wstETH (Jun 2025)

25

JONES

26

PREMIA

27

RDNT

28

vARB

29

GMX

30

Staked-GMX

You can check this table is correct and up-to-date by visiting DolomiteMargin on Arbiscan, clicking Read Contract, selecting the getMarketPriceOracle function and plugging in the corresponding marketId into the input field.

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.

Arbitrum One

Market IDSymbolSupply Cap

0

WETH

No limit

1

DAI

2,000,000 DAI

2

USDC.e

No limit

3

LINK

500,000 LINK

4

WBTC

500 WBTC

5

USDT

25,000,000 USDT

6

GLP

No limit

7

ARB

5,000,000 ARB

8

magicGLP

5,000,000 magicGLP

9

plvGLP

5,000,000 plvGLP

10

jUSDC

2,500,000 jUSDC

11

PT-GLP (Mar 2024)

1,000,000 PT-GLP

12

UNI

400,000 UNI

13

MIM

1,000,000 MIM

14

wstETH

3,000 wstETH

15

rETH

1,000 rETH

16

YT-GLP (Mar 2024)

500,000 YT-GLP

17

USDC

No limit

18

GRAIL

500 GRAIL

19

MAGIC

1,250,000 MAGIC

20

DPX

2,000 DPX

21

PENDLE

1,250,000 PENDLE

22

PT-rETH (Jun 2025)

1,000 PT-rETH

23

PT-wstETH (Jun 2024)

1,000 PT-wstETH

24

PT-wstETH (Jun 2025)

750 PT-wstETH

25

JONES

100,000 JONES

26

PREMIA

500,000 PREMIA

27

RDNT

5,000,000 RDNT

28

vARB

10,000,000 vARB

29

GMX

1 wei unit

30

Staked-GMX

100,000 Staked-GMX

You can check this table is correct and up-to-date by visiting DolomiteMargin on Arbiscan, clicking Read Contract, selecting the getMarketMaxWei function and plugging in the corresponding marketId into the input field.

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

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)

Market IDSymbolMinimum Collateralization (% LTV)

0

WETH

115% (or 86.9565% LTV)

1

DAI

115% (or 86.9565% LTV)

2

USDC.e

115% (or 86.9565% LTV)

3

LINK

125% (or 80% LTV)

4

WBTC

115% (or 86.9565% LTV)

5

USDT

115% (or 86.9565% LTV)

6

GLP

120% (or 83.3333% LTV)

7

ARB

115% (or 86.9565% LTV)

8

magicGLP

120% (or 83.3333% LTV)

9

plvGLP

120% (or 83.3333% LTV)

10

jUSDC

115% (or 86.9565% LTV)

11

PT-GLP (Mar 2024)

120% (or 83.3333% LTV)

12

UNI

133% (or 75% LTV)

13

MIM

115% (or 86.9565% LTV)

14

wstETH

115% (or 86.9565% LTV)

15

rETH

115% (or 86.9565% LTV)

16

YT-GLP (Mar 2024)

150% (or 66.6667% LTV)

17

USDC

115% (or 86.9565% LTV)

18

GRAIL

150% (or 66.6667% LTV)

19

MAGIC

150% (or 66.6667% LTV)

20

DPX

150% (or 66.6667% LTV)

21

PENDLE

150% (or 66.6667% LTV)

22

PT-rETH (Jun 2025)

120% (or 83.3333% LTV)

23

PT-wstETH (Jun 2024)

120% (or 83.3333% LTV)

24

PT-wstETH (Jun 2025)

120% (or 83.3333% LTV)

25

JONES

166% (or 60% LTV)

26

PREMIA

166% (or 60% LTV)

27

RDNT

125% (or 80% LTV)

28

vARB

120% (or 83.3333% LTV)

29

GMX

125% (or 80% LTV)

30

Staked-GMX

125% (or 80% LTV)

You can check this table is correct and up-to-date by visiting DolomiteMargin on Arbiscan, clicking Read Contract, selecting the getMarginRatio function, adding 1e18 then dividing by 1e18. Doing so gives you the global minimum collateralization (115%).

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%.

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.

Arbitrum One

Market IDSymbolCollateral-Only Mode Enabled

0

WETH

FALSE

1

DAI

FALSE

2

USDC.e

FALSE

3

LINK

FALSE

4

WBTC

FALSE

5

USDT

FALSE

6

GLP

TRUE

7

ARB

FALSE

8

magicGLP

TRUE

9

plvGLP

TRUE

10

jUSDC

TRUE

11

PT-GLP (Mar 2024)

TRUE

12

UNI

FALSE

13

MIM

FALSE

14

wstETH

FALSE

15

rETH

FALSE

16

YT-GLP (Mar 2024)

TRUE

17

USDC

FALSE

18

GRAIL

FALSE

19

MAGIC

FALSE

20

DPX

FALSE

21

PENDLE

FALSE

22

PT-rETH (Jun 2025)

TRUE

23

PT-wstETH (Jun 2024)

TRUE

24

PT-wstETH (Jun 2025)

TRUE

25

JONES

TRUE

26

PREMIA

TRUE

27

RDNT

FALSE

28

vARB

TRUE

29

GMX

TRUE

30

Staked-GMX

TRUE

You can check this table is correct and up-to-date by visiting DolomiteMargin on Arbiscan, clicking Read Contract, selecting the getMarketIsClosing function and plugging in the corresponding marketId into the input field.

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.

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.

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 for the creation of the vaults, so your vault address is known before the deposit is executed and the vault is created.

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.

LevelDescription

1

Can contain any debt or collateral asset in the same position, as long as those assets are not in isolation mode

2

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.

3

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

The table below denotes the isolation mode status of each asset on each network Dolomite Margin is deployed.

Arbitrum One

Market IDSymbolIsolation Mode Level

0

WETH

DISABLED

1

DAI

DISABLED

2

USDC.e

DISABLED

3

LINK

DISABLED

4

WBTC

DISABLED

5

USDT

DISABLED

6

GLP

1

7

ARB

DISABLED

8

magicGLP

DISABLED

9

plvGLP

1

10

jUSDC

3 (can only have USDC as debt; no other collateral assets are allowed)

11

PT-GLP (Mar 2024)

1

12

UNI

DISABLED

13

MIM

DISABLED

14

wstETH

DISABLED

15

rETH

DISABLED

16

YT-GLP (Mar 2024)

2 (can only have WETH, DAI, USDC, USDT, WBTC, and MIM debt)

17

USDC

DISABLED

18

GRAIL

DISABLED

19

MAGIC

DISABLED

20

DPX

DISABLED

21

PENDLE

DISABLED

22

PT-rETH (Jun 2025)

1

23

PT-wstETH (Jun 2024)

1

24

PT-wstETH (Jun 2025)

1

25

JONES

DISABLED

26

PREMIA

DISABLED

27

RDNT

DISABLED

28

vARB

1

29

GMX

DISABLED

30

Staked-GMX

1

You can check this table is correct and up-to-date by visiting DolomiteMargin 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.

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

Market IDSymbolForcefully Expired?

0

WETH

N/A

1

DAI

N/A

2

USDC.e

N/A

3

LINK

N/A

4

WBTC

N/A

5

USDT

N/A

6

GLP

FALSE

7

ARB

N/A

8

magicGLP

N/A

9

plvGLP

FALSE

10

jUSDC

FALSE

11

PT-GLP (Mar 2024)

FALSE

12

UNI

N/A

13

MIM

N/A

14

wstETH

N/A

15

rETH

N/A

16

YT-GLP (Mar 2024)

TRUE; Maximum position duration is the lesser of 4 weeks OR 1 week until maturity (Thu Mar 28 2024 00:00:00 GMT; 1711584000 unix timestamp)

17

USDC

N/A

18

GRAIL

N/A

19

MAGIC

N/A

20

DPX

N/A

21

PENDLE

N/A

22

PT-rETH (Jun 2025)

FALSE

23

PT-wstETH (Jun 2024)

FALSE

24

PT-wstETH (Jun 2025)

FALSE

25

JONES

N/A

26

PREMIA

N/A

27

RDNT

N/A

28

vARB

FALSE

29

GMX

N/A

30

Staked-GMX

FALSE

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

Market IDSymbolOnly EOA?

0

WETH

N/A

1

DAI

N/A

2

USDC.e

N/A

3

LINK

N/A

4

WBTC

N/A

5

USDT

N/A

6

GLP

FALSE

7

ARB

N/A

8

magicGLP

N/A

9

plvGLP

FALSE

10

jUSDC

TRUE

11

PT-GLP (Mar 2024)

FALSE

12

UNI

N/A

13

MIM

N/A

14

wstETH

N/A

15

rETH

N/A

16

YT-GLP (Mar 2024)

FALSE

17

USDC

N/A

18

GRAIL

N/A

19

MAGIC

N/A

20

DPX

N/A

21

PENDLE

N/A

22

PT-rETH (Jun 2025)

FALSE

23

PT-wstETH (Jun 2024)

FALSE

24

PT-wstETH (Jun 2025)

FALSE

25

JONES

N/A

26

PREMIA

N/A

27

RDNT

N/A

28

vARB

FALSE

29

GMX

N/A

30

Staked-GMX

FALSE

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

Market IDSymbolPause Sentinel Trigger

0

WETH

N/A

1

DAI

N/A

2

USDC.e

N/A

3

LINK

N/A

4

WBTC

N/A

5

USDT

N/A

6

GLP

DISABLED

7

ARB

N/A

8

magicGLP

N/A

9

plvGLP

If the vaultParams() disable redemptions

10

jUSDC

If the JonesUSDCIsolationModeUnwrapperTrader is unable to bypass the 24hr withdrawal period or is not whitelisted. If the JonesGlpVaultRouter toggles the emergencyPaused state

11

PT-GLP (Mar 2024)

If the SY GLP token is paused

12

UNI

N/A

13

MIM

N/A

14

wstETH

N/A

15

rETH

N/A

16

YT-GLP (Mar 2024)

If the SY GLP token is paused

17

USDC

N/A

18

GRAIL

N/A

19

MAGIC

N/A

20

DPX

N/A

21

PENDLE

N/A

22

PT-rETH (Jun 2025)

If the SY rETH token is paused

23

PT-wstETH (Jun 2024)

If the SY wstETH token is paused

24

PT-wstETH (Jun 2025)

If the SY wstETH token is paused

25

JONES

N/A

26

PREMIA

N/A

27

RDNT

N/A

28

vARB

DISABLED

29

GMX

N/A

30

Staked-GMX

DISABLED

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:

amount_seized = 
    debt_amount * debt_price_usd / collateral_price_usd * (1 + liquidation_penalty)

Dolomite supports full account liquidations and partial liquidations, depending on the preference of the liquidator.

Expirations

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:

amount_seized = 
    debt_amount * debt_price_usd / collateral_price_usd * (1 + liquidation_penalty)

Health Factor

On the 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 Treshold - when collateral assets < $115 OR debt assets > $104.35

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.

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.

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 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.

Arbitrum One

Global liquidation penalty: 5%

Market IDSymbolLiquidation Penalty

0

WETH

5%

1

DAI

5%

2

USDC.e

5%

3

LINK

7%

4

WBTC

5%

5

USDT

5%

6

GLP

5%

7

ARB

5%

8

magicGLP

5%

9

plvGLP

5%

10

jUSDC

5%

11

PT-GLP (Mar 2024)

5%

12

UNI

7%

13

MIM

5%

14

wstETH

5%

15

rETH

5%

16

YT-GLP (Mar 2024)

10%

17

USDC

5%

18

GRAIL

10%

19

MAGIC

10%

20

DPX

10%

21

PENDLE

10%

22

PT-rETH (Jun 2025)

7%

23

PT-wstETH (Jun 2024)

7%

24

PT-wstETH (Jun 2025)

7%

25

JONES

15%

26

PREMIA

15%

27

RDNT

7%

28

vARB

7%

29

GMX

8%

30

Staked-GMX

8%

You can check this table is correct and up-to-date by visiting DolomiteMargin on Arbiscan, clicking Read Contract, selecting the getLiquidationSpread function and dividing by 1e18. Doing so gives you the global liquidation penalty of 5%.

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%.

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.

Last updated