# FAQ

<details>

<summary><strong>What is providing liquidity?</strong></summary>

Providing liquidity means depositing cryptocurrency assets into a liquidity pool on a decentralized exchange (DEX). These pools facilitate trading between crypto pairs without traditional market makers.

As a liquidity provider (LP), you receive liquidity tokens representing your share of the pool. These tokens can be redeemed for your original investment. Your contribution helps facilitate trading, and in return, you earn a portion of the trading fees generated from transactions within the pool.

</details>

<details>

<summary><strong>What to consider when providing liquidity on a DEX?</strong></summary>

* **Impermanent Loss:** Be aware of impermanent loss, which occurs when the value of your deposited assets changes compared to their value at deposit. Greater price divergence can lead to higher impermanent loss.
* **Pool Composition:** Evaluate the assets in the pool. Pools with volatile assets may offer higher returns but come with increased risk.
* **Transaction Fees:** Consider the DEX’s fee structure. Higher fees could lead to greater rewards but might also reduce trading volume and overall profitability.

  Tokenomics: Understand the liquidity tokens' economic model and how changes in asset supply and demand might affect them.
* **Smart Contract Risk:** Assess the security of the DEX and its smart contracts. Prefer audited and well-established contracts to minimize risk.
* **Liquidity of the Pool:** Check the total value locked (TVL) in the pool. Higher liquidity usually means less slippage and better trade execution.
* **Investment Duration:** Decide whether to provide liquidity as a short-term or long-term investment. Some pools offer incentives for longer staking periods.
* **DEX Reputation and Volume:** Research the DEX’s reputation and trading volume. Established and high-volume exchanges typically offer more stable earning potential.

</details>

<details>

<summary><strong>Why do token prices on Krystal look different vs. in other apps?</strong></summary>

Krystal uses a combination of data sources to determine token prices, which may lead to price differences compared to other apps:

* **Market Price:** Krystal aggregates token prices in USD (e.g., 1 ETH = $4,000) from multiple sources, including centralized exchanges (Binance, OKX, Coinbase) and decentralized exchanges (Uniswap, SushiSwap, PancakeSwap). This data is sourced through Coingecko.
* **Pool Price:** The pool price (e.g., 1 ETH = 4,008 USDC) reflects the current state of the liquidity pool, considering factors like token availability, fee tiers, and liquidity distribution.

Although Krystal integrates both market and pool prices for accuracy, several factors can still impact price precision:

* Network issues or server errors
* Discrepancies between decentralized and centralized exchange prices
* Delays in EVM node updates

</details>

<details>

<summary><strong>How does Krystal estimate a pool APR?</strong></summary>

The formula to calculate pool APR at Krystal is shown below:

`APR = (24h earning * 365) / Current liquidity * 100%`

The APR might vary based on multiple factors

* Uniformly Distributed Liquidity vs. Concentrated Liquidity:
  * For Uniformly Distributed Liquidity (as in UniSwap v2 and other similar protocols), the current liquidity is the total liquidity in that pool at this moment.
  * For Concentrated Liquidity (as in UniSwap v3 and other similar protocols), the current liquidity is the amount of liquidity at a specific price range chosen by users. Therefore, a narrower price range leads to smaller current liquidity, which then leads to higher APR.
* Users’ Activities:

  When a user makes a big deposit or withdraw, the amount of liquidity in the pool at the moment will be different than the amount of liquidity which generated earning in the last 24 hours. Therefore, the APR value will not be 100% accurate.

</details>

<details>

<summary><strong>What is Share Price?</strong></summary>

When you deposit assets into a Vault, you receive **Vault Shares** in return. These shares represent your portion of the Vault.&#x20;

The **Share Price** tells you how much one share is worth in terms of the underlying assets (like ETH, USDC, or other tokens).

> **Share Price = Total Value of Assets in Vault ÷ Total Number of Shares Issued**

</details>

<details>

<summary><strong>What should I do if I can’t withdraw my funds via the Krystal interface? (e.g., data issue, UI bug)</strong></summary>

Don’t worry — **your funds are always safe**.

If the interface isn’t working, you can still withdraw directly from the vault’s smart contract:

#### ✅ How to withdraw manually:

1. Open the vault on Explorer (click the explorer icon next to the vault address).

   <figure><img src="https://1670507844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAmo4vXpjHKQh32RAZ0AA%2Fuploads%2FCAcgFsOKiSp26HkC4Fx3%2FScreenshot%202025-07-01%20at%2015.56.15.png?alt=media&#x26;token=4715d276-8286-4d30-9b8b-c5ccf2194983" alt=""><figcaption></figcaption></figure>

2. Go to the **“Read”** tab → find your share balance.

   <figure><img src="https://1670507844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAmo4vXpjHKQh32RAZ0AA%2Fuploads%2FTWbs4OPnfTIS0t3uvFvq%2FScreenshot%202025-07-01%20at%2015.58.57.png?alt=media&#x26;token=157397b6-c3e9-49fa-b043-b5f8329a7bc7" alt=""><figcaption></figcaption></figure>

3. Go to the **“Write”** tab → connect your wallet.

   <figure><img src="https://1670507844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAmo4vXpjHKQh32RAZ0AA%2Fuploads%2Feo15nWoN26QAnzesVqPx%2FScreenshot%202025-07-01%20at%2016.15.08.png?alt=media&#x26;token=0e6c72de-b105-4925-8959-fdd09e30015b" alt=""><figcaption></figcaption></figure>

4. Call the `withdraw()` function with your share amount.

   <figure><img src="https://1670507844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAmo4vXpjHKQh32RAZ0AA%2Fuploads%2FaMpnSKjt5ND0Q56tVG9a%2FScreenshot%202025-07-01%20at%2016.30.00.png?alt=media&#x26;token=769f647c-332a-450a-9f03-3d06e4fd0048" alt=""><figcaption></figcaption></figure>

   If you’re doing an emergency withdraw and set `minReturnAmount = 0`, the transaction will **ignore slippage protection**, which is fine for small positions. But what if you're holding a **large value** and want to **avoid high slippage loss**?

   No worries — you can **manually calculate and set your `minReturnAmount`** using the vault’s smart contract. Here’s how:

   **1. Get your share amount**

   Use `balanceOf(address)` → function selector: `0x70a08231`

   **2. Get total share supply**

   Call `totalSupply()` → selector: `0x18160ddd`

   **3. Get total vault value**

   Use `getTotalValue()` → selector: `0xcaa648b4`

   **4. Estimate your withdrawal value**

   `principalValue = (yourShare / totalSupply) * totalVaultValue`

   **5. Apply your slippage tolerance**

   For 10% slippage: `minReturnAmount = principalValue * 0.9`

   **Example Calculation**

   <pre data-overflow="wrap" data-full-width="true"><code>yourShare = 2988890466857239298455
   totalSupply = 22672705752623181671029
   totalVaultVaule = 2295323334552647861
   slippage 10%
   minReturnAmount = (yourShare / totalSupply) * totalVaultValue * 0.9 = 272328459473129900
   </code></pre>

   <div align="center" data-full-width="true"><figure><img src="https://1670507844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAmo4vXpjHKQh32RAZ0AA%2Fuploads%2FjaklnrAcSrFqlXbyqfLi%2FScreenshot%202025-07-01%20at%2017.23.34.png?alt=media&#x26;token=c21e5bc8-8013-414a-ab37-68d2eedb22c0" alt=""><figcaption></figcaption></figure></div>

</details>

<details>

<summary><strong>What is slippage?</strong></summary>

**Slippage** is the difference between the price when an order is placed and the price when that order is executed. Slippage can happen when you swap, deposit and withdraw liquidity.

* **Swap Slippage**

  For any Swap transaction at Krystal, you can either choose the pre-selected slippage suggested by Krystal or set up your own slippage. As long as the execution price is within the slippage range, e.g., %1, your order will be executed. Otherwise, the order will fail, which means the swap will not occur.
* **Liquidity Deposit / Liquidity Withdraw Slippage**

  Slippage can also happen when you deposit or remove liquidity. The same logic as swap is applied: If execution price is within the slippage allowance, your order will be executed.

</details>

<details>

<summary><strong>What're the Risks using Krystal Vault?</strong></summary>

Vault holds a collection of working Liquidity Positions, so you are still exposed to the Impermanent Loss.

Private Vault provides efficiency when farming liquidity.

You could also invest in Public Vault by others for simplicity. Public Vaults carry inherent risks as anyone could create a Public Vault. Always understand how the vault works and DYOR carefully [risks](https://docs.krystal.app/products/vaults/risks "mention").

</details>

<details>

<summary><strong>Enable TWAP for a Liquidity Pool</strong></summary>

{% hint style="warning" %}
After enabling, it will take some time for the TWAP price to be ready.
{% endhint %}

TWAP price is required for Vault, for on-chain's validation.

Enabling TWAP (Time-Weighted Average Price) allows a liquidity pool to record historical price data, which is useful for calculating more stable, average prices over time.&#x20;

This is supported on Uniswap V3 or compatible pools (like Algebra, Pancake V3, etc.). Anyone can enable TWAP by calling the `increaseObservationCardinalityNext()` function on the pool. It requires a small gas fee but has no other risks.

</details>

<details>

<summary><strong>How to Solve Gas Exceeds Block Limit on HyperEVM (Rabby Wallet)?</strong></summary>

**Why do I see the error “Fail to create – Gas exceeds block gas limit”?**

This happens because HyperEVM uses a **dual-block architecture**:

* **Small blocks:** 2M gas limit (used for quick transactions)
* **Large blocks:** 30M gas limit (used for complex operations)

Krystal uses **small blocks** by default. If your transaction (after Rabby Wallet adds its gas buffer) exceeds the 2M gas limit, you’ll see this error

<figure><img src="https://1670507844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAmo4vXpjHKQh32RAZ0AA%2Fuploads%2FJeQyTe7HB34p53ys2rzI%2FScreenshot_2025-09-17_at_12.00.40.png?alt=media&#x26;token=c6a112b9-8f38-48e5-9718-c710db9701b2" alt=""><figcaption></figcaption></figure>

**Why does this issue often happen with Rabby Wallet?**

Rabby automatically applies a **gas buffer** (typically 1.3x–1.5x the estimated gas).

* For some transactions (e.g., zapping from USDT into a pool like UPUMP/WHYPE), this buffer **pushes the gas above the 2M limit**, which small blocks cannot accept

<figure><img src="https://1670507844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAmo4vXpjHKQh32RAZ0AA%2Fuploads%2FGyuu6oRoL2OQIrycwl1E%2FScreenshot_2025-09-17_at_15.19.17.png?alt=media&#x26;token=e0b6e75c-89fa-4669-b239-6846f7781fdc" alt=""><figcaption></figcaption></figure>

#### **How can I fix the gas exceeds block limit error?**

When you’re signing a transaction:

* Look for the **Advanced Settings** option.
* You’ll see fields for **Gas Limit** and **Nonce**.
* Adjust only the **Gas Limit** (<= 2,000,000).

#### **Do I always need to change this setting?**

No.

* You only need to adjust it when your transaction fails with the **“gas exceeds block limit”** error.
* For most standard transactions, Rabby’s default buffer works fine.

***

</details>

<details>

<summary><strong>Failed to simulate the transaction when using Solflare?</strong></summary>

Users using **Solflare** to make transactions with **Krystal** on **Solana** may encounter simulation failure errors. You can continue the transaction by checking `I trust this site.`

* For example, a user joining the WSOL/USDC pool with a single token (SOL) through Zap using the Solflare wallet extension.

<img src="https://github.com/KrystalDeFi/docs-gitbook/blob/main/docs/liquidity-farming/.gitbook/assets/Screenshot%202025-01-20%20at%2015.20.12.png" alt="" data-size="original">

* Confirming that Zap often involves the simulation process in Solflare, which can result in a simulation failure error.

<img src="https://github.com/KrystalDeFi/docs-gitbook/blob/main/docs/liquidity-farming/.gitbook/assets/Screenshot%202025-01-20%20at%2016.01.26.png" alt="" data-size="original">

* This is a limitation of Solflare when simulating complex transactions that involve more intricate processes compared to standard transfers. They provide more details about this issue in the official documentation [here](https://help.solflare.com/en/articles/9263757-why-did-my-transaction-fail).
* You can continue the transaction by checking `I trust this site` and `Approve`

<img src="https://github.com/KrystalDeFi/docs-gitbook/blob/main/docs/liquidity-farming/.gitbook/assets/Screenshot%202025-01-20%20at%2016.01.36.png" alt="" data-size="original">

</details>

<details>

<summary><strong>Compliance with FATF Recommendations</strong></summary>

In accordance with **FATF** (Financial Action Task Force) recommendations, Krystal has implemented measures to restrict distribution to specific countries.

You can find more details here: <https://www.fatf-gafi.org/en/countries/black-and-grey-lists.html>

</details>
