# Introduction

This documentation provides general information for users of Euphrates and guides for anyone involved in the software development of Euphrates.

Platform Overview

Euphrates is a platform that allows stakers and liquidity providers of Liquid Staking Tokens (LSTs) to earn boosted rewards in ACA, as well as tokens from participating projects, with minimal effort.

Version Updates

* Current Version (V2): Euphrates V2 supports deposits from a broader range of Proof-of-Stake (PoS) blockchains, including JitoSOL from Solana, rETH from Ethereum, and more to come.
* Previous Version (V1): Euphrates V1 only accepted LCDOT and DOT deposits for DOT-based LST (Liquid Staking Token) derivatives pools, such as tDOT and LDOT.

Token Information

Euphrates does not have its own token.

[Euphrates App](https://farm.acala.network)

[Discord](https://discord.gg/5JJgXKSznc)

[Twitter](https://twitter.com/AcalaNetwork)


# Pools

### LDOT Pool

LDOT is Acala Liquid Staking DOT, a non-custodial liquid staking token where users stake DOT and receive LDOT token that represents the principle staked asset plus the staking yield continuously accruing.\
\
Staking Process: DOT holders can stake DOT into the LDOT pool where DOT will be staked in the LDOT protocol and in return, users receive LDOT. This LDOT is automatically staked on Euphrates to earn staking yield and additional rewards in ACA.\
\
Unstaking Process: LDOT pool stakers can unstake their LDOT from Euphrates and receive LDOT in their wallet. If the user wishes to return to DOT, they can redeem their DOT either through standard redemption or fast-redemption for a fee on the [Acala Platform](https://apps.acala.network/ldot).

### tDOT Pool

tDOT is powered by the Taiga protocol. It has the stability of native DOT through price pegging, with the yield of LDOT. By providing assets to mint tDOT, users will earn yield from LDOT and protocol fees. Read more[ here](https://www.taigaprotocol.io/).\
\
Staking Process: DOT holders can stake DOT into the tDOT pool where DOT will be staked in the tDOT protocol and in return, users receive tDOT. This tDOT is automatically staked on Euphrates to earn staking yield and additional rewards in ACA and TAI.

Unstaking Process: tDOT pool stakers can unstake their tDOT from Euphrates and receive tDOT in their wallet. If the user wishes to return to DOT, they can redeem their DOT either through standard redemption on the [Taiga platform](https://dot.taigaprotocol.io/assets/redeem/tdot).

### JitoSOL Pool

JitoSOL is trusted by the largest validators of Solana and is the first Solana-based LST to provide MEV-powered staking rewards. JitoSOL is obtained from the [JitoSOL staking page](https://www.jito.network/staking/) where users can learn more about the product and stake their SOL.\
\
Staking Process: JitoSOL holders can stake their JitoSOL in the single-sided JitoSOL staking pool to earn ACA rewards in addition to their SOL staking yield. During the staking process, JitoSOL is bridged and staked from the Solana ecosystem into AcalaEVM and therefore requires both Solana and EVM wallet accounts.\
\
Unstaking Process: JitoSOL pool stakers unstaking JitoSOL will receive JitoSOL on AcalaEVM. If a users wishes to return the JitoSOL to Solana, they can use the [multi-asset bridge](https://apps.acala.network/bridge) provided by Acala and then redeem their JitoSOL back to SOL on the [JitoSOL staking page](https://www.jito.network/staking/).&#x20;

### rETH Pool (soon)

rETH is a leading decentralized liquid staking protocol built on Ethereum with the flexibility to unstake at any time. rETH is obtained from the [RocketPool staking page](https://stake.rocketpool.net/) where users can learn more about the product and stake their ETH.\
\
Staking Process: rETH holders can stake their rETH in the rETH staking pool to earn ACA rewards in addition to their rETH staking yield. During the staking process, rETH is bridged and staked from Ethereum to Euphrates on AcalaEVM.\
\
Unstaking Process: rETH pool stakers can unstake their rETH from Euphrates and receive rETH in their EVM wallet on Acala. If the user wishes to return to ETH, they can bridge their rETH through the [multi-asset bridge](https://apps.acala.network/bridge) and redeem their ETH on the [RocketPool staking page](https://stake.rocketpool.net/).

### LKSM Pool (soon)

LKSM is Acala Liquid Staking Kusama, a non-custodial liquid staking token where users stake KSM and receive LKSM token that represents the principle staked asset plus the staking yield continuously accruing.\
\
Staking Process: LKSM holders can stake their LKSM in the LKSM staking pool to earn ACA rewards in addition to their KSM staking yield. During the staking process, LKSM is bridged and staked from the Karura ecosystem into AcalaEVM and therefore requires both Karura and EVM wallet accounts. \
\
Unstaking Process: LKSM pool stakers can unstake their LKSM from Euphrates and receive LKSM in their EVM wallet. If the user wishes to return to KSM, they can bridge their LKSM through the [multi-asset bridge](https://apps.acala.network/bridge) and then redeem their KSM either through standard redemption or fast-redemption for a fee on the [Karura Platform](https://apps.karura.network/lksm).


# Rewards

Euphrates rewards are made of incentive rewards in ACA and participating projects tokens and LST protocol yields:

* tDOT APR ([App](https://www.taigaprotocol.io/), [Protocol](https://docs.taigaprotocol.io/overview/introduction))
* LDOT APR ([App](https://apps.acala.network/ldot), [Protocol](https://docs.homastaking.app/))
* JitoSOL APR ([App](https://www.jito.network/), [Protocol](https://www.jito.network/docs/jitosol/introduction-to-jito/))

## LCDOT Staking Rewards

There are two staking pools for LCDOT holders: LDOT and tDOT Pools

LDOT Pool APR = ACA incentive APR + LDOT APR

tDOT Pool APR = ACA incentive APR + TAI incentive APR + tDOT APR

## DOT Staking Rewards

There are two staking pools for DOT holders: LDOT and tDOT Pools

LDOT Pool APR = ACA incentive APR + LDOT APR

tDOT Pool APR = ACA incentive APR + TAI incentive APR + tDOT APR

## JitoSOL Staking Rewards

There is one staking pool for JitoSOL holders.

JitoSOL Pool APR = ACA incentive APR + JitoSOL APR + JTO incentive APR

## Incentive Rewards

Each pool can set up an incentive program to

* run for a specific period of time
* with a certain amount of reward tokens to be distributed every x blocks
* stakers will receive rewards pro-rata to their share of the pool
* APR will vary depending on reward rate and the amount of staked assets
* the incentive program can include ACA and other participating project tokens
* loyalty bonus is applied

### Loyalty Bonus

The purpose of Loyalty Bonus is to

* avoid hot bags mining and dumping
* encouraging more sustainable, longer term farming for the benefit of the protocol and the entire network
* share more rewards for longer term liquidity providers compared to just vesting

**How does Loyalty Bonus work?**

A Loyalty Bonus ratio e.g. 40% can be set up for each program

* a staker will need to keep the reward token in the pool until the end of the program to receive the bonus
* if the staker claims the reward tokens earlier, then its bonus will be added back to the reward pool to be shared amongst other stakers
* long term stakers are likely to receive higher rewards than standard rewards


# Unified Account

With the Unified Account system, users can use an Ethereum account to interact with contracts in EVM, Polkadot/Acala Substrate runtime, and a hybrid of these. Users can simply bind their Ethereum account with a Polkadot/Substrate account (serving as proof of ownership for both accounts), then the Ethereum account can be used to sign a Polkadot/Substrate transaction such as participating in native Polkadot liquid staking.

To enable Unified Account and use Acala EVM+, simply bind your Ethereum account with a Polkadot/Substrate account ***once***, and you can then use the Ethereum account via popular wallets like MetaMask and Wallet Connect. You can find the step-by-step guide [here](/how-to-guides/setup-wallet#step-by-step-guide).


# For LCDOT Holders

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

Euphrates provides a stake-and-forget service with extra rewards for LCDOT holders:

* stake LCDOT into a LST (liquid staking token) pool of choice e.g. tDOT pool, LDOT pool
* stakers start earning rewards in ACA and participating project tokens immediately upon Acala crowdloan unlock ([at block 17856000, Oct 24\~](https://polkadot.subscan.io/block/17856000))
* staked LCDOT will automatically be claimed into DOT
* claimed DOT will automatically be turned into LST of choice
* do not miss a day of DOT staking rewards

Users can also withdraw LCDOT to DOT, if they choose not to participate in staking.

Read the staking guide [here](/how-to-guides/use-euphrates/stake-lcdot)

Stake now on [Euphrates App](https://farm.acala.network)


# For DOT Holders

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

Euphrates provides boosted liquid staking for DOT holders:

* stake DOT into a LST (liquid staking token) pool of choice e.g. tDOT pool, LDOT pool
* staked DOT will automatically be turned into the LST of choice and start earning respective DOT staking rewards
* earn additional rewards in ACA and participating project tokens
* withdraw LST anytime to use in the ecosystem and earn more rewards

Read the staking guide [here](/how-to-guides/use-euphrates/stake-dot)

[Euphrates App](https://farm.acala.network)


# For JitoSOL Holders

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

Euphrates provides boosted (re)staking for users.&#x20;

* bridge + stake JitoSOL from Solana (one-click) or Stake JitoSOL from Acala into the JitoSOL pool
* staked JitoSOL will continue to earn staking rewards in SOL
* additional rewards in ACA and participating project tokens will begin accruing automatically
* withdraw JitoSOL anytime to use in the ecosystem and earn more rewards

Read the staking guide [here](https://farmdoc.acala.network/how-to-guides/use-euphrates/stake-jitosol).\
\
[Euphrates App](https://farm.acala.network/)


# Glossary

A page to find information on commonly used token and terms on Euphrates.

## Tokens

**DOT:** The token representing the Polkadot ecosystem.\
\
**LDOT:** Liquid DOT is a token representing the underlying staked asset DOT. It has a built in system to accrue the value of DOT staking rewards and is considered a Liquid Staking Token.\
\
**LCDOT:** Liquid Crowdloan DOT is a token that represents DOT locked in a crowdloan and can be redeemed 1:1 with DOT.\
\
**tDOT:** Taiga DOT is a token created by Taiga Protocol that’s price is pegged to DOT. Taiga DOT captures multiple sources of yield including underlying DOT derivatives, protocol fees and token incentives.\
\
**wtDOT:** Wrapped Taiga DOT is a version of tDOT that is easier to integrate into DeFi solutions and protocols.

**JitoSOL:** JitoSOL is a token representing a liquid form of the underlying staked Solana. It is built to accrue SOL staking rewards and MEV rewards and was create by the Jito Foundation . \
\
**ACA:** The governance token of the Acala Network. Read more [here](https://wiki.acala.network/acala-exodus-upgrade/aca).\
\
**TAI:** The governance token of Taiga Protocol. Read more [here](https://docs.taigaprotocol.io/overview/tai-token).\
\
**LAY:** The native token of Starlay Finance. Read more [here](https://docs.starlay.finance/tokenomics/lay).

**JTO**: The governance token of the Jito ecosystem. Read more [here](https://www.jito.network/jto/).

## Terms

**Unified Account:** The binding of an Ethereum wallet with a Substrate wallet. A Unified Account grants users the ability to interact with contracts in both EVM and Substrate. More information [here](/euphrates/unified-account).

**Loyalty Program:** A system built to benefit long term farmers and discourage hot bags. Bonus rewards are given to committed farmers and relinquished for short term farmers. More information [here.](/euphrates/rewards)

**Liquid Staking Token:** A liquid staking token is a token that represents the staked amount of a cryptocurrency on a Proof-of-Stake (PoS) blockchain.


# Setup Wallet

### Unified Account

With the Unified Account system, users can use an Ethereum account to interact with contracts in EVM, Polkadot/Acala Substrate runtime, and a hybrid of these. Euphrates will support Ethereum LST and pools and beyond, so with Unified Account, you set it up once, and can use it for cross-stack cross-chain interactions. Read more [here](#unified-account).

### Pre-requisites

1. Ethereum wallet e.g. MetaMask with an account not bound to any Polkadot/Substrate account. ([Create a MetaMask Wallet](https://support.metamask.io/hc/en-us/articles/360015489531-Getting-started-with-MetaMask), [create an additional account in the Wallet](https://support.metamask.io/hc/en-us/articles/360015289452-How-to-create-an-additional-account-in-your-wallet))
2. Substrate Wallets e.g. Polkadot{js}, Talisman, Subwallet with an account not bound to any Ethereum account. ([Create a Substrate Wallet](https://wiki.acala.network/get-started/acala-network/acala-account/account-generation))
3. ACA in your Substrate Wallet to pay for transaction fees ([Fund Your Substrate Wallet](https://wiki.acala.network/integrate/integration/token-transfer))

### Set up a Unified Account

To enable Unified Account and use Acala EVM+, you will

1. Login with a supported Ethereum wallet e.g. MetaMask, Wallet Connect
2. Login (once) with a Polkadot/Substrate wallet e.g. Polkadot{js}, Talisman, Subwallet
3. Sign a transaction to bind the two accounts

### Step-by-Step Guide

To setup

1. Go on the Euphrates App and click “Connect Wallet”

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

2. Click MetaMask or your Ethereum wallet of choice via Wallet Connect

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

3. Select the account you wish to connect and click “Next”

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

4. Confirm the selection by clicking “Connect”

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

5. If this is your first time interacting with the Acala Network you will be asked to add the network to your Metamask and switch to it. Click “Approve” then “Switch Network”.&#x20;

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

If you are having trouble connecting your MetMask, you can either add it via [Acala on ChainList](https://chainlist.org/chain/787), or manually add the Acala network by opening your MetaMask wallet and going to Settings-> Networks -> Add Networks and entering the following information:\
\
**Network Name:** Acala

**New RPC URL**`https://eth-rpc-acala.aca-api.network/`

**Chain ID:** 787

**Currency Symbol:** ACA

**Block Explorer URL**`https://blockscout.acala.network/`&#x20;

6. Select your Substrate Wallet

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

7. Select the account you wish to connect and click “Connect”

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

8. Ensure you have the correct accounts and click “Bind”. **Binding is permanent and cannot be undone once completed.**

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

9. Sign the transaction on your Ethereum Wallet, then Approve the binding on your Substrate Wallet

<figure><img src="/files/9w6lUgldPVGKdChzBqyU" alt=""><figcaption></figcaption></figure>

10. Congratulations, you have successfully unified your wallets 🎉

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


# Check Unified Account Status

Use Euphrates or Polkadot{.js} to see if an account is bound.

### Using Euphrates

1. Go to [farm.acala.network](http://farm.acala.network/) and click connect wallet

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

2. In the ‘Unified Account” section click the hyperlink ‘here’

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

3. Paste in either your Ethereum address or Substrate address then click “Check”

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

4. If your account is bound, it will display the binded address in the empty field. If your account isn’t bound, it will display “no bound account” in the empty field.

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

### Using Polkadot.js

At the Polkadot.js UI you can easily query Unified Account with a Substrate or Ethereum account, just step by step below, follow this link to skip steps 1-3 and start from step 4.

1. Browse <https://polkadot.js.org>,
2. Select Acala network,&#x20;
3. Go to Developer tab on top menu and select Chain State
4. Select "EVM accounts" and "accounts(H160): Option\<AccountId32>"

When you try to bind a Substrate account to an Ethereum account and it states that it's already bound, then you can&#x20;

* use the above method to find out which Ethereum account it is
* log in with that Ethereum account instead OR
* use a different Substrate account to bind

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


# Create a MetaMask Wallet

**Creating a MetaMask Wallet (Chrome Browser)**

1. Visit <https://metamask.io> and click “Download”
2. Click “Install MetaMask for Chrome”
3. Click “Add to Chrome” to download the extension
4. Agree to the ToU and click “Create a new wallet”
5. Agree or decline the following prompt on data usage reporting
6. Create a strong password and click “Create a new wallet”
7. Secure your wallet (you have an option to do this at a later time)
8. Your recovery phrase can be revealed. **DO NOT SHARE THIS AND KEEP IT IN A TRUSTED PLACE.** Access to your recovery phrase grants full access to your wallet.
9. Once saved, click “Next” and confirm your recovery phrase in the empty spaces
10. Congratulations you’ve created a MetaMask wallet. You may find it helpful to pin MetaMask to the taskbar


# Funding Your Unified Account

Below are the simplified instructions for transferring funds from Polkadot an exchange to your Unified Account.

### Via Polkadot

1. Go to <https://apps.acala.network/bridge> and connect your wallet
2. Make sure the Origin Chain is set to Polkadot and the Destination Chain is set to Acala
3. Enter the amount of DOT you wish to transfer and click Transfer
4. Confirm the transaction in your wallet and your new balance should be updated on both wallets

{% content-ref url="/pages/xTBOdsZuxORGfbnfI7T1" %}
[Via Polkadot Visual Guide](/how-to-guides/setup-wallet/funding-your-unified-account/via-polkadot-visual-guide)
{% endcontent-ref %}

### Via Exchange

1. Log into your selected exchange and withdraw DOT to your Substrate wallet on Polkadot.
2. Go to the Bridge tab on the Acala platform: <https://apps.acala.network/bridge> and connect your Substrate wallet
3. Ensure that the Origin Chain is “Polkadot” and the Destination Chain is “Acala”
4. Enter the amount of DOT you wish to transfer and click Transfer
5. Confirm the transaction in your wallet and your new balance should appear on both wallets

{% content-ref url="/pages/47mXDo17UtPit5UXrOBO" %}
[Via Exchange Visual Guide](/how-to-guides/setup-wallet/funding-your-unified-account/via-exchange-visual-guide)
{% endcontent-ref %}


# Via Polkadot Visual Guide

1. Go to <https://apps.acala.network/bridge> and connect your wallet

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

2. Make sure the Origin Chain is set to Polkadot and the Destination Chain is set to Acala

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

3. Enter the amount of DOT you wish to transfer and click Transfer

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

4. Confirm the transaction in your wallet and your new balance should update on both wallets


# Via Exchange Visual Guide

1. Log into your selected exchange (e.g. Binance) and withdraw DOT to your Substrate wallet with Polkadot network selected.

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

2. Go to the Bridge tab on the Acala platform: <https://apps.acala.network/bridge> and connect your Substrate wallet

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

3. Ensure that the Origin Chain is “Polkadot” and the Destination Chain is “Acala”

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

4. Enter the amount of DOT you wish to transfer and click Transfer

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

5. Confirm the transaction in your wallet and your new balance should appear on both wallets


# Funding Your EVM Wallet

How to send DOT and other tokens to your EVM wallet

## Sending DOT to Your Ethereum Wallet

To add funds to your Ethereum or Binance wallet, the process varies based on the source of the funds. Below are the simplified instructions for transferring funds from Polkadot, Acala or an exchange to your Ethereum or Binance wallet. An in depth visual guide is provided at the end of each method.

## Simplified Guides

### Via Polkadot

1. Go to the Bridge tab on the Acala platform: <https://apps.acala.network/bridge> and connect your Substrate wallet
2. Ensure that the Origin Chain is “Polkadot” and the Destination Chain is “Acala”
3. For the Destination Account, click the “Edit(advanced)” button on the top right of the input field
4. Enter your Metamask wallet address and click Confirm
5. Enter the amount of DOT you wish to transfer and click Transfer
6. Sign the transaction and wait for confirmation

{% content-ref url="/pages/cMT2gMZCrp1ipUgGGJ0N" %}
[Via Polkadot Visual Guide](/how-to-guides/setup-wallet/funding-your-evm-wallet/via-polkadot-visual-guide)
{% endcontent-ref %}

### Via Acala Network

1. Go to the portfolio tab on the Acala DApp platform : <https://apps.acala.network/portfolio> and connect your Substrate wallet
2. Find your DOT holdings and click on the “Transfer” button
3. Copy your Metamask wallet address and paste it into the Recipient box.
4. Enter the amount of DOT you would like to transfer and click Transfer
5. Sign the transaction and wait for confirmation

{% content-ref url="/pages/RH14mSvnWV2casrSV5ZA" %}
[Via Acala Network Visual Guide](/how-to-guides/setup-wallet/funding-your-evm-wallet/via-acala-network-visual-guide)
{% endcontent-ref %}

### Via a Centralized Exchange

1. Log into your exchange and withdraw your DOT to your Substrate wallet on Polkadot.
2. Go to the Bridge tab on the Acala platform :<https://apps.acala.network/bridge> and connect your Substrate wallet
3. Ensure that the Origin Chain is “Polkadot” and the Destination Chain is “Acala”
4. For the Destination Account, click the “Edit(advanced)” button on the top right of the input field
5. Enter your Ethereum wallet address and click Confirm. *You can find your Binance Ethereum wallet address by connecting to Euphrates and clicking on your wallet address at the top right corner.*
6. Enter the amount of DOT you wish to transfer and click Transfer
7. Sign the transaction and wait for confirmation

{% content-ref url="/pages/r5eTiPQDQJiurVVTmyIU" %}
[Via Centralized Exchange Visual Guide](/how-to-guides/setup-wallet/funding-your-evm-wallet/via-centralized-exchange-visual-guide)
{% endcontent-ref %}


# Via Polkadot Visual Guide

Sending funds to your EVM wallet via Polkadot Network

## Sending DOT Via Polkadot

1. Go to the Bridge tab on the Acala platform : <https://apps.acala.network/bridge>[ ](https://apps.acala.network/bridge)and connect your Substrate wallet

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

2. Ensure that the Origin Chain is “Polkadot” and the Destination Chain is “Acala”

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

3. For the Destination Account, click the “Edit (advanced)” button on the top right of the input field

<figure><img src="/files/4n58ipfbgTy5Ey1UUNOV" alt=""><figcaption></figcaption></figure>

4. Clear the box and paste your Ethereum wallet address and click Confirm

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

Your wallet address can be found within your wallet or on [Euphrates](https://farm.acala.network/) by clicking on your wallet address on the top right corner after successfully connecting.

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

5. Enter the amount of DOT you wish to transfer and click Transfer

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

6. Sign the transaction and wait for confirmation. Your DOT will update on Euphrates.


# Via Acala Network Visual Guide

Sending funds to your EVM wallet via Acala Network

1. Go to the portfolio tab on the Acala DApp platform : <https://apps.acala.network/portfolio> and connect your wallet

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

2. Scroll down to the ASSET section and find your DOT holdings

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

3. Click on the “Transfer” button

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

4. Copy your Ethereum wallet address and paste it into the Recipient box.

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

Your wallet address can be found within your wallet or on [Euphrates](https://farm.acala.network/) by clicking on your wallet address on the top right corner followed by the copy icon.

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

5. Enter the amount of DOT you would like to transfer and click Transfer

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

6. Sign the transaction and wait for confirmation. Your DOT will update on Euphrates.


# Via Centralized Exchange Visual Guide

Sending funds to your EVM wallet via a Centralized Exchange

1. From any Exchange, e.g. Binance, withdraw DOT to your Substrate wallet (Polkadot Network).

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

2. Visit Acala platform’s Bridge tab : <https://apps.acala.network/bridge>[ ](https://apps.acala.network/bridge)and connect your Substrate wallet

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

3. Ensure that the Origin Chain is “Polkadot” and the Destination Chain is “Acala”

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

4. For the Destination Account, click the “Edit (advanced)” button on the top right of the input field

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

5. Clear the box and paste your Ethereum wallet address and click Confirm

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

Your wallet address can be found within your wallet or on [Euphrates](https://farm.acala.network/) by clicking on your wallet address on the top right corner after successfully connecting.

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

6. Enter the amount of DOT you wish to transfer and click Transfer

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

7. Sign the transaction and wait for confirmation. Your DOT will update on Euphrates.


# Use Euphrates

Once you have [set up a Unified Account](/euphrates/unified-account), you can head to [Euphrates App](https://farm.acala.network)

{% content-ref url="/pages/tSNLyRXVFmS5PlZTiyS9" %}
[Stake LCDOT](/how-to-guides/use-euphrates/stake-lcdot)
{% endcontent-ref %}

{% content-ref url="/pages/aJvMlmaajCM48gnMeNPW" %}
[Stake DOT](/how-to-guides/use-euphrates/stake-dot)
{% endcontent-ref %}

{% content-ref url="/pages/Zw24qXn3mkx71nPzUf6i" %}
[Withdraw DOT & Stake](/how-to-guides/use-euphrates/withdraw-dot)
{% endcontent-ref %}

{% content-ref url="/pages/elUaLdk1XBM58DwWrn3l" %}
[Claim Rewards](/how-to-guides/use-euphrates/claim-rewards)
{% endcontent-ref %}

{% content-ref url="/pages/KX4bhH7wD6exJtO3Wm5F" %}
[Unstake](/how-to-guides/use-euphrates/unstake)
{% endcontent-ref %}

{% content-ref url="/pages/Y4zMpjQBz8iVyFoYp7Tl" %}
[Withdraw DOT from LCDOT](/how-to-guides/use-euphrates/withdraw-lcdot)
{% endcontent-ref %}


# Connect to Euphrates

Choose the method to connected to Euphrates.

There are two ways to connect to Euphrates. The first method involves only using an Ethereum wallet while the second is through a Unified Account. A Unified Account comprises both an Ethereum and Substrate wallet that are linked together. More information about a Unified Account can be found [here.](https://farmdoc.acala.network/euphrates/unified-account)

### Pre-requisites

#### Ethereum or Binance Wallet Only

1. One standard Ethereum Wallet or Binance Wallet \
   *Use Metamask: (*[*Create a MetaMask Wallet*](https://support.metamask.io/hc/en-us/articles/360015489531-Getting-started-with-MetaMask)*,* [*create an additional account in the Wallet*](https://support.metamask.io/hc/en-us/articles/360015289452-How-to-create-an-additional-account-in-your-wallet)*)* \
   *Use Binance Wallet: (*[*iOS*](https://apps.apple.com/US/app/id1436799971?mt=8)*,* [*Android*](https://play.google.com/store/apps/details?id=com.binance.dev\&referrer=af_tranid%3Dvvl4rWsK4_TrXepYRrzRxw%26c%3Dhttps://www.binance.com/en%26pid%3Dhttps://www.binance.com/en\&pli=1)*)*

#### Unified Account

1. Ethereum Wallet or Binance Wallet with an account not bound to any Polkadot/Substrate account.
2. Substrate Wallet e.g. Polkadot{js}, Talisman, Subwallet with an account not bound to any Ethereum account. *(*[*Create a Substrate Wallet*](https://wiki.acala.network/get-started/acala-network/acala-account/account-generation)*)*
3. ACA in your Substrate Wallet to pay for transaction fees ([Fund Your Substrate Wallet](https://wiki.acala.network/integrate/integration/token-transfer))

### Simplified Guide

#### Metamask or Wallet Connect Only

1. Visit <https://farm.acala.network/> and click Connect
2. Choose Metamask or WalletConnect
3. Click “Skip for now”
4. Your Metamask or EVM Wallet is now connected to Euphrates. You can find out how to fund your wallet [here.](/how-to-guides/setup-wallet/funding-your-evm-wallet)

{% content-ref url="/pages/HyBvNXEsrsgH8whdOEvG" %}
[Metamask/Wallet Connect Visual Guide](/how-to-guides/use-euphrates/connect-to-euphrates/metamask-wallet-connect-visual-guide)
{% endcontent-ref %}

#### Binance Wallet Only

1. Visit <https://farm.acala.network/> and click Connect
2. Choose Binance Wallet
3. Scan your QR Code using your Binance app
4. Click “Skip for now”
5. Your Binance Wallet is now connected to Euphrates. You can find out how to fund your wallet [here](https://www.notion.so/ac077183fefd4fa08d7ec4f8b6728781?pvs=21).

{% content-ref url="/pages/Q2iW0KlkglJCN4xGbbpD" %}
[Binance Wallet Only Visual Guide](/how-to-guides/use-euphrates/connect-to-euphrates/binance-wallet-only-visual-guide)
{% endcontent-ref %}

#### Unified Account

1. Connect your Ethereum wallet or Binance Wallet
2. Connect your Substrate wallet
3. Ensure the correct accounts are selected and click “Bind”
4. Approve the Ethereum and Substrate wallet transactions
5. You have created a Unified Account, funds on your Substrate wallet will be displayed on your Ethereum wallet.

{% content-ref url="/pages/Qs9Faig1hydWaGYGMJf4" %}
[Unified Account Visual Guide](/how-to-guides/use-euphrates/connect-to-euphrates/unified-account-visual-guide)
{% endcontent-ref %}


# Metamask/Wallet Connect Visual Guide

### Ethereum Wallet Only

1. Go to <https://farm.acala.network/> and click “Connect Wallet”.

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

2. Select Metamask or WalletConnect to connect your wallet.

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

3. Click “Skip for now” to avoid binding your account.

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

4. Your Metamask or EVM Wallet is now connected to Euphrates. You can find out how to fund your wallet [here.](/how-to-guides/setup-wallet/funding-your-evm-wallet)


# Binance Wallet Only Visual Guide

1. Visit <https://farm.acala.network/> and click Connect

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

2. Choose Binance Wallet and scan your QR Code using your Binance app

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

3. Make sure “Acala EVM” is the selected Network and then click “Continue” then “Connect”

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

4. Click “Skip for now”

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

5. Your Binance Wallet is now connected to Euphrates. You can find out how to fund your wallet [here](/how-to-guides/setup-wallet/funding-your-evm-wallet).


# Unified Account Visual Guide

How to create a Unified Account through Euphrates

*You will need a small amount of ACA to pay for the transaction fee of binding (\~0.003 ACA)*

1. Go to <https://farm.acala.network/> and click “Connect Wallet”.

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

2. Select Either Metamask, Binance Wallet or WalletConnect to connect your wallet.

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

3. Select your Substrate wallet that you will bind and click connect.

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

4. Ensure the wallet addresses are correct and click bind. **Binding is non-reversible.**

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

5. Approve the transaction on your Ethereum wallet and Substrate wallet.

<figure><img src="/files/170v0rAlRk2Q1pVjyY2v" alt=""><figcaption></figcaption></figure>

6. Congratulations, you’ve created a Unified Account, a completion message will pop up. You may now log in with your Ethereum wallet to sign Substrate transactions.

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


# Stake LCDOT

### **Prerequisite:**

Make sure you have set up a Unified Account, follow the guide [here](/how-to-guides/setup-wallet).

### **Step-by-Step Guide**

1. Make sure you are on the Euphrates official site with LCDOT selected

<figure><img src="/files/4eLET19BKdA43KRbKTzD" alt=""><figcaption></figcaption></figure>

2. Connect your wallet to the application
3. Choose an LST pool you are interested in and click “Stake Now”

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

4. Read the details of the pool and scroll down to the “Stake your LCDOT” section
5. Enter the amount of LCDOT you would like to stake and click “Stake Now”

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

6. A confirmation transaction will show up on your Metamask (If this is your first time interacting with Euphrates an approval request will show up first). Confirm the transaction.

   <figure><img src="/files/tbQRWSS9KdxlUObcqnst" alt=""><figcaption></figcaption></figure>
7. You can verify your stake on the “Current Stake’ section. Happy staking 😊

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


# Stake DOT

### **Prerequisite:**

1. You have set up a Unified Account, follow the guide [here](/how-to-guides/setup-wallet).
2. You have bridged DOT to Acala network, follow the guide [here](https://farmdoc.acala.network/how-to-guides/use-euphrates/pages/Zw24qXn3mkx71nPzUf6i#2.-bridge-dot-to-acala).

### **Step-by-Step Guide**

1. Select “DOT” near the top of the homepage or make sure you are on the official Euphrates DOT staking page: <https://farm.acala.network/dot>

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

2. Connect your wallet to the application
3. Choose an LST pool you are interested in and click “Stake Now”

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

4. Read the details of the pool and scroll down to the “Stake your DOT” section
5. Enter the amount of DOT you would like to stake and click “Stake Now”

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

6. A confirmation transaction will show up on your Metamask (If this is your first time interacting with Euphrates, an approval request will show up first). Confirm the transaction.

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

7. You can verify your stake on the “Current Stake’ Section. Happy staking 😊

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


# Stake JitoSOL

### **Prerequisite:**

Ensure you have Solana (SOL) in your Phantom or Solana wallet. If you don’t hold any SOL, you can purchase or trade for tokens on several centralized or decentralized exchanges.

If you currently hold JitoSOL, you may skip to Step 4.

### **Step-by-Step Guide**

1. Go to <https://www.jito.network/staking/> and connect your Solana wallet.

   <figure><img src="/files/p3qcgFgpJBQ5JDTlaBYu" alt=""><figcaption></figcaption></figure>
2. Enter the amount of SOL you wish to stake and click “Convert to JitoSOL”.

   <figure><img src="/files/bapKLmWbjOwrKgO00l0A" alt=""><figcaption></figcaption></figure>
3. Go to[ https://farm.acala.network/pool/6](https://farm.acala.network/pool/6).

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

4. Connect your Metamask or EVM wallet to Euphrates platform.

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

5. Navigate to Solana section, connect your Phantom or Solana Wallet in the “Origin Account” section.

   <figure><img src="/files/rA9ivf9HpETeyJWGUmiw" alt=""><figcaption></figcaption></figure>
6. Enter the amount of JitoSOL you would like to stake, click “Stake Now” and confirm the transaction in your wallet.

   <figure><img src="/files/865x9VSTpM0St3Dj6lxG" alt=""><figcaption></figcaption></figure>
7. Wait for the Bridge + Stake process to complete. You may move off of the screen once the “submit transaction” portion is complete.

   <figure><img src="/files/8Bie2FqOz3QWVWuQVQoQ" alt=""><figcaption></figcaption></figure>
8. Once complete, you may scroll down to the bottom of the page to monitor current stake and see your accrued rewards

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


# Stake JitoSOL-LDOT LP

A step by step video guide and visual guide to staking JitoSOL-LDOT LP on Euphrates

{% embed url="<https://youtu.be/ihUFSnsWFm4>" %}
Video Walk-Through&#x20;
{% endembed %}

### **Step 1: Visit** [**https://farm.acala.network/**](https://farm.acala.network/) **and connect your wallet.**

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

### **Step 2: Go to the LP LDOT-JitoSOL Pool.**

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

### **Step 3: Ensure you are "on Acala" if the assets are already on Acala Network.**&#x20;

If you need to bridge assets over, you can use the bridging feature by ensuring Solana is active under "Available via Bridge".&#x20;

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

### **Step 4: Enter the amount of JitoSOL and/or LDOT you wish to commit.**

Any amount can be committed as the Asset Router will balance the tokens evenly into LP tokens.

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

### **Step 5: Click "Stake Now" and confirm the spending limits.**

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

<figure><img src="/files/n5IaH5d3I7o4ZeIuRjfD" alt=""><figcaption><p>Spending limits are used as a preventative measure to allow the protocol to spend a maximum amount of tokens for a transaction. The first time you stake you will be asked to confirm a spending limit. You will only be asked this once at the beginning unless you wish to stake an amount greater than the spending limit you first approve. </p></figcaption></figure>

### **Step 6: Sign the staking transaction.**

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

### LP staking complete!&#x20;

You can scroll down to the bottom of the page to see your balance and accumulated reward.

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


# Bootstrapping LP

A description of the features and buttons when bootstrapping LP on Euphrates + FAQ

## **Bootstrapping Panel**

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

1. Status of the pool (currently in boostrapping stage).
2. Liquidity Target is an amount of tokens that is required for the pool to be launched. This is 1 of the two criteria.&#x20;
3. End date of the boostrapping period. The Liquidity Target must be met before the End Date for the pool to automatically launch.&#x20;
4. Estimated APY if the Liquidity Target is met.
5. Access to the Bootstrapping Page.

## Bootstrapping Page

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

1. Switch to asset on Acala Network.
2. Switch to Solana Bridging Page.
3. Unstake JitoSOL from the JitoSOL Staking Pool.
4. Enter the amount of JitoSOL you wish to commit.
5. Go to the DOT staking page on the Acala Platform to obtain LDOT.
6. Enter the amount of LDOT you wish to commit.
7. Finalize the token commitment. If you choose to commit two tokens, there will be two transactions to confirm.
8. The current LDOT to JitoSOL ratio. This ratio is important as it will be used to automatically split any asset committed to the pool.

## Solana Bridging Page

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

1. Switch to Acala Network assets.
2. Connect your Solana wallet.
3. Enter the amount of JitoSOL you wish to Bridge.
4. Bootstrapping period timer.

## Frequently Asked Questions

**What happens if the Liquidity Target isn't reached?**&#x20;

Tokens will be returned to the users split evenly between the two assets. \
\
**Can I withdraw my assets after I commit them?**

Assets are locked for the duration of the Boostrapping Period. Assets can be withdraw after the pool is successfully launched or will be returned if the pool is unsuccessful

**Do I have to deposit an equal amount of both assets?**

No. You can deposit any amount of the assets and the asset will convert the assets evenly into the LP.

**Can I deposit only one asset into the LP?**

Yes. You can deposit either side of the LP's asset and in any amount. The asset router will convert the assets evenly into the LP.&#x20;


# Withdraw DOT & Stake

WithdrawDOT

You can withdraw DOTs contributed to crowdloans that are expired, and stake them via Euphrates to earn DOT staking yield and boosted rewards. Below is a guide to withdraw and stake DOT.

### 1. **Withdraw DOT contributed to crowdloan via Polkadot{JS}**

When the lease periods won by the crowdloan have finished, or the crowdloan has ended without winning a slot, anyone can trigger the refund of crowdloan contributions back to their original owners.

This can be done through the permissionless `crowdloan.refund` extrinsic available on [Polkadot JS Apps](https://polkadot.js.org/apps) > Developer > Extrinsics page, by specifying the parachain ID. This extrinsic may need to be issued multiple times, if the list of contributors is too long. All contributions must be returned before the crowdloan is entirely deleted from the system.

Read more [here](https://wiki.polkadot.network/docs/learn-crowdloans#withdraw-crowdloaned-tokens)

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

### 2. **Bridge DOT to Acala**

2.1 Connect to [Acala Apps](https://apps.acala.network/) and click on `Bridge` on the left-hand side of the page.

Keep Polkadot as the `Origin Chain` and select Acala as the `Destination Chain`. Enter the amount of DOT you’d like to send. Click `Transfer`.

For Ledger users, please check compatibility [here](https://github.com/Zondax/ledger-acala) before sending funds to a Ledger account

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

2.2 Return to the Portfolio tab to see your transferred DOT balance.

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

### 3. **Stake DOT to LDOT or tDOT pool**

You can stake DOT to earn DOT staking yield and boosted rewards in ACA and participating project tokens e.g. TAI. Following [this guide](https://farmdoc.acala.network/how-to-guides/use-euphrates/stake-dot) for staking DOT.

**Note**: if your DOT is in a Ledger wallet, first transfer your DOT from Ledger wallet to a Substrate wallet (you can create a new Substrate wallet following one of these guides [here](https://wiki.acala.network/get-started/acala-network/acala-account/account-generation)), then follow the instructions on this page to bring the DOT to Acala.


# Claim Rewards

Incentive rewards are subject to loyalty bonus rules, read more on rewards [here](https://farmdoc.acala.network/euphrates/rewards). Follow the guide below to claim your rewards

**Pre-Requisite** [Setup Wallet](/how-to-guides/setup-wallet)

Steps:

1. Make sure you are on the Euphrates official site: <https://farm.acala.network><br>

   <figure><img src="/files/QYBwN6SGxx7CnidBlF2c" alt=""><figcaption></figcaption></figure>
2. Connect your wallet to the application.
3. Choose an LST pool you want to claim rewards and click “Go to Pool”.<br>

   <figure><img src="/files/enI2eV0Mcm5usrSUkRvR" alt=""><figcaption></figcaption></figure>
4. Click the "Claim" button. Note: Pool has to be unlocked and you have Earned rewards for claim.\
   Note: Pool has to be unlocked and you have Earned rewards for claim.<br>

   <figure><img src="/files/3RElAXBaEqcOLC9vYINP" alt=""><figcaption></figcaption></figure>
5. Click the "Claim" button in the “Claim your rewards pop-up”.<br>

   <figure><img src="/files/15jzeP4GejmLxI2jgtND" alt=""><figcaption></figcaption></figure>
6. A confirmation transaction will show up on your Metamask. Confirm the transaction.\
   ![](/files/UYX8XN72VwxEC6gUchf7)
7. Done


# Unstake

Unstaking your assets on Euphrates

The unstaking process for a single-sided staking pool generally follows the same procedure. Below, we provide an example of unstaking from the LCDOT pool with steps that can be applied to any single-sided staking pool.

The difference lies in state the token is received in after unstaking:

* For **LCDOT staking**, you will receive **LDOT (on Acala)** after unstaking.
* For **DOT staking**, you will receive **LDOT (on Acala)** after unstaking.
* For **JitoSOL staking**, you will receive **JitoSOL (on AcalaEVM)** after unstaking.

**Pre-Requisite** Polkadot or Acala based tokens require a unified account for the full experience. AcalaEVM tokens do not need a unified account but is encoruage to create one to unlock all current and future possibilities. \
[Setup a Unified Account](https://www.notion.so/o/-M_OLwcDFbYSOX9rQ5hU/s/VQGEivDEmJ3zsYnfc80H/~/changes/62/how-to-guides/setup-wallet)

Steps:

1. Make sure you are on the Euphrates official site: <https://farm.acala.network><br>

   <figure><img src="/files/bs13hPD3DRu7PUQ1uXec" alt=""><figcaption></figcaption></figure>
2. Connect your wallet to the application.
3. Choose an LST pool you want to unstake from, and click “Go to Pool”.

   You can only unstake from a pool that you have previously staked in.<br>

   <figure><img src="/files/Xbo0GFDn4yRvUcVrJatT" alt=""><figcaption></figcaption></figure>
4. Click the "Unstake" button.<br>

   <figure><img src="/files/bPex8bpI4Ds4OvgbpB8V" alt=""><figcaption></figcaption></figure>
5. Enter the amount to unstake and click "Unstake"<br>

   <figure><img src="/files/WXCeuf18EoS3Dtcbm5z9" alt=""><figcaption></figcaption></figure>
6. A confirmation transaction will pop up on your MetaMask. Confirm the transaction.\
   ![](/files/oUdU9bh0dYCAyzc73GzR)
7. You can check the amount of assets you staked in the “Current Stake’ Section.<br>

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


# Withdraw DOT from LCDOT

LCDOT

Follow this guide to withdraw DOT from LCDOT.&#x20;

Pre-requisite

* Follow [this guide](/how-to-guides/setup-wallet) to set up a Unified Account
* Ensure that you have transferrable LCDOT on your account e.g. NOT in LP or staked

1. Make sure you are on the Euphrates official site: <https://farm.acala.network/>

2. Scroll down to the ‘How Euphrates Works’ section and click the highlighted ‘withdraw’ button

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

3. Enter the amount of LCDOT you would like to withdraw and click “Withdraw”

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

4. A confirmation transaction will show up on your Metamask (If this is your first time interacting with Euphrates, an approval request will show up first). Confirm the transaction.

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

5. Your DOT is ready 😊


# Get LCDOT/ACA

To get LCDOT, or ACA (required for fee for staking in Euphrates), go to [AcalaSwap](https://apps.acala.network/swap) - instructions [here](https://guide.acalaapps.wiki/acala-swap/swapping-tokens).

If you have DOT, you can [follow this guide](https://guide.acalaapps.wiki/general/bringing-tokens-to-karura/dot-transfers) to transfer DOT onto Acala to swap LCDOT or pay fees or participate in DOT related pools etc.


# Integration

## API

### Total DOT Locked

Total LDOT and tDOT Locked in LSTs on Acala

{% code overflow="wrap" %}

```javascript
Method: HTTP-GET
URL: https://farm.acala.network/api/total_locked
```

{% endcode %}

### TVL

TVL of the LST pool

```jsx
Method: HTTP-GET
URL: https://farm.acala.network/api/tvl
```

### tDOT APR

```jsx
Method: HTTP-GET
URL: https://api.taigaprotocol.io/rewards/apr?network=acala&pool=0
```

### StellaSwap LP TVL

```javascript
Method: GraphQL
URL: https://api.thegraph.com/subgraphs/name/stellaswap/pulsar

Query:
{
  pool(id: "0x6bb200b706ffa1665127877a11588221c49d9eed") {
    totalValueLockedUSD
  }
}
```

### StellaSwap Trading fees APR

```javascript
Method: HTTP
URL: https://apr-api.stellaswap.com/api/v1/poolsAPR/

Find value of 0x6bb200b706ffa1665127877a11588221c49d9eed
```

### StellaSwap Farm APR

```javascript
Method: HTTP
URL: https://apr-api.stellaswap.com/api/v1/poolsAPR/

Find value of 0x6bb200b706ffa1665127877a11588221c49d9eed
rewardTokenApr is ACA's APR
bonusToken is STELLA's APR
lastApr = rewardTokenApr + bonusToken
```

### Token Price

```jsx
Method: HTTP-GET
URL: https://farm.acala.network/api/token_prices
```

### Pools Details

LST pool details

```jsx
Method: HTTP-GET
URL: https://farm.acala.network/api/pools/{poolId}
```

**Parameters**

The only required query parameter is `poolId`

### Dapp Version

Front-end version update prompt

```jsx
Method: HTTP-GET
URL: https://farm.acala.network/api/version
```

### Pool TVL History

Historical TVL data of LST pool

```jsx
Method: HTTP-GET
URL: https://farm.acala.network/api/tvl/{poolId}
```

**Parameters**

The only required query parameter is `poolId`

### LCDOT in Acala

The user’s LCDOT balance in Acala

```jsx
Method: HTTP-POST
URL: https://acala.api.subscan.io/api/v2/scan/search

Find asset_registry/bfa7a23dc17bb490d4032c78cbc87babb4eb6f74 in response
```

**Parameters**

| Parameter       | Type   | Description                           |
| --------------- | ------ | ------------------------------------- |
| page            | number | page index                            |
| value range ≥ 0 |        |                                       |
| row             | number | number of row to be returned per page |
| value range ≥ 0 |        |                                       |
| key             | string | filter by contributor address         |

### LCDOT in Polkadot{.js}

The user’s contribution in Polkadot{.js}

```jsx
Method: HTTP-POST
URL: https://polkadot.api.subscan.io/api/scan/account/contributions

Find para_id in response
para_id: {
	'2000': 'Acala',
	'2002': 'Clover',
	'2004': 'Moonbeam',
	'2006': 'Astar',
	'2012': 'Parallel',
	'2030': 'Bifrost',
	'2031': 'Centrifuge',
	'2035': 'Phala Network',
	'2021': 'Efinity',
	'2019': 'Composable Finance',
	'2032': 'Interlay',
	'2026': 'Nodle',
	'2034': 'HydraDX',
}
```

**Parameters**

| Parameter       | Type   | Description                           |
| --------------- | ------ | ------------------------------------- |
| page            | number | page index                            |
| value range ≥ 0 |        |                                       |
| row             | number | number of row to be returned per page |
| value range ≥ 0 |        |                                       |
| who             | string | filter by contributor address         |

### **LCDOT in Parallel**

The user’s cDOT balance in Parallel

```jsx
Method: HTTP-POST
URL: https://polkadot.api.subscan.io/api/scan/multiChain/account

Find LCDOT in response
- cDOT-6/13 200060013
- cDOT-7-14 200070014
- cDOT-8/15 200080015
```

**Parameters**

| Parameter | Type   | Description                   |
| --------- | ------ | ----------------------------- |
| address   | string | filter by contributor address |

## Subquery

### LDOT APR

```jsx
Method: HTTP-POST
URL: https://api.polkawallet.io/acala-liquid-staking-subql

Examples:
{
  query {
    dailySummaries(first: 30, orderBy: TIMESTAMP_DESC) {
      nodes {
        exchangeRate
        timestamp
      }
    }
  }
}

Calculation: 
const exchangeRates = result.query.dailySummaries.nodes;

const first = exchangeRates[0];
const last = exchangeRates[exchangeRates.length - 1];
const len = exchangeRates.length;

const apr = (first.exchangeRate / last.exchangeRate - 1) * (365 / len);
// you can also calculate apy
const apy = apr + (first.exchangeRate / last.exchangeRate - 1)
```


# FAQ

### When can I convert my LCDOT back to DOT?

After the Acala crowdloan unlock ([at block 17856000, 00:08 UTC Oct 24\~](https://polkadot.subscan.io/block/17856000)).

### What is LCDOT?

LCDOT stands for Liquid Crowdloan DOT. It is a token that is a 1:1 representation of DOT locked in the Acala crowdloan. You can obtain LCDOT from [Acala Swap](https://apps.acala.network/swap).

### What is Euphrates?

Euphrates primarily allows stakers and liquidity providers of LSTs (liquid staking tokens) to earn boosted rewards and also claim ACA and other participating project token rewards. Euphrates will be deployed with DOT-based LST liquidity vaults, and later expanded to support Ethereum and other multichain LST liquidity vaults.

### How does Euphrates work?

For LCDOT stakers, DOT will automatically be claimed and turned into an LST of choice upon the Acala crowdloan unlock ensuring users don’t miss a day of DOT staking rewards.

For DOT stakers, DOT will automatically be turned into an LST of choice.

LSTs can be withdrawn at any time and both paths reward ACA and participating project tokens

### Is it safe to use and work with Euphrates?

In order to be safe, Euphrates continues to do the following

* Open sourcing & continuous reviewing of all codes
* Use non-custodial staking service to eliminate counter-party risks
* External audits can be found here

### What are the risks of using Euphrates?

There are always \*\*\*\*inherent risks associated with engaging with decentralized-finance smart contracts, pallets and networks :

* Smart Contract & Pallet risks: Euphrates code is open-sourced, audited and covered by bug bounty
* Associated risks from protocols including [Acala Liquid Crowdloan DOT LCDOT](https://wiki.acala.network/crowdloans/acala-crowdloan/faq#liquid-crowdloan-and-lcdot), [Homa Liquid Staking DOT](https://docs.homastaking.app/) and [Taiga Finance tDOT](https://www.taigaprotocol.io/) as Euphrates integrates directly with them.

Acala is determined to mitigate the above risks and eliminate them entirely to the extent possible. Despite this, they may still exist.

### What is staking APR for LCDOT?

There are two staking pools for LCDOT, LDOT pool and tDOT pool.

**Before unlock (aka Acala lease ends)**

LDOT Pool APR = ACA incentive APR

tDOT Pool APR = ACA incentive APR + TAI incentive APR

**After unlock (aka Acala lease ends)**

LDOT Pool APR = ACA incentive APR + LDOT APR

tDOT Pool APR = ACA incentive APR + TAI incentive APR + tDOT APR

Read more about rewards [here](/euphrates/rewards)

### What is staking APR for DOT?

There are two staking pools for DOT, LDOT pool and tDOT pool.

LDOT Pool APR = ACA incentive APR + LDOT APR

tDOT Pool APR = ACA incentive APR + TAI incentive APR + tDOT APR

Read more about rewards [here](/euphrates/rewards)

### What is tDOT?

tDOT is the synthetic stable asset that is backed by the DOT Stable Swap. You can read about the details of its architecture [here](https://docs.taigaprotocol.io/overview/architecture#tdot).

### What is LDOT?

LDOT is a staking yield-bearing token. It represents the principle staked DOT plus the staking yield continuously accruing. You can read more about L-Tokens [here](https://docs.homastaking.app/overview/l-token).

### How can I unstake?

Navigate to the pool that you have staked, then navigate to the 'Current Stake' section. Click on the 'Unstake' button to unstake your assets. For LCDOT, you can unstake the LSTs that LCDOT converts into after the unlock (parachain lease expires). Read more [here](/how-to-guides/use-euphrates/unstake).

### How can I withdraw DOT with my LCDOT?

If you do not want to participate in LCDOT staking, you can choose to withdraw DOT from crowdloan after the unlock. Withdraw DOT from LCDOT [here](https://farm.acala.network/withdraw)


# Risks

Please take a moment to read the following important information about our staking pool

We prioritize safety and security, but it's important to acknowledge the inherent risks associated with engaging with decentralized-finance smart contracts, pallets, and networks. We have taken extensive measures to ensure the reliability of Euphrates smart contracts, including thorough internal reviews, engaging external auditors to identify and address potential vulnerabilities prior to the platform's launch, and setting up bug bounties such as [Immunifi](https://immunefi.com/bug-bounty/euphrates/). However, it's essential to recognize that there is still a possibility, albeit low, of experiencing partial or complete loss of funds. Therefore, we strongly advise users to exercise caution and operate within their own risk framework when interacting with the platform.

### **General Risks**

**Smart Contract Risks:** Your staked assets will be managed through Acala smart contracts. While we ensure high-security standards, smart contracts inherently come with risks such as bugs and vulnerabilities.

**Loss of Funds:** There is always a possibility of partial or complete loss of funds. Exercise caution and operate within your own risk framework.

**User Responsibility:** It is crucial to understand the risks involved and conduct your own research before participating. Stay informed about any updates or changes to the smart contracts and tokens used.

### **Euphrates Platform and Native Pools**

Despite extensive measures to ensure the reliability of our smart contracts, potential vulnerabilities may still exist. Users should be aware of and accept the risks associated with decentralized finance.

**Acala Native Pools (LDOT and LCDOT)**

* **Smart Contract Risks on Acala Network:** Your staked assets will be managed through smart contracts on the Acala network. While we ensure high-security standards, smart contracts inherently come with risks, such as bugs and vulnerabilities.
* **Rewards and Principal:** We strive to provide bonus rewards for staking your assets, but we cannot guarantee specific returns or the safety of the principal amount staked. Staking involves risks, so please only stake within your risk profile.

Read through our [Homa Protocol (LDOT) documentation](https://docs.homastaking.app/) and [Liquid Crowdloan (LCDOT) documentation](https://wiki.acala.network/crowdloans/acala-crowdloan/faq#liquid-crowdloan-and-lcdot) for more information.

### **External Pools**

Euphrates integrates with several external platforms, which come with their own sets of risks. It is important to thoroughly review the documentation and risk explanations provided by these platforms before engaging with them. Below are the details of the external pools:

* **TDOT (Taiga Liquid Staking Token):** Your assets are subject to the smart contract risks associated with Taiga Finance tDOT, including technological, governance, and security risks. For more information, please review [Taiga Finance's website.](https://www.taigaprotocol.io/)
* **JitoSOL (Liquid Staking Token):** Our staking pool uses JitoSOL liquid staking tokens. Consequently, your assets are subject to the smart contract risks associated with JitoSOL, including technological, governance, and security risks. For more information, please review [JitoSOL's risk documentation](https://www.jito.network/docs/jitosol/disclaimer/).
* **Stellaswap (Decentralized Exchange):** Our platform integrates with Stellaswap, a decentralized exchange (DEX). Engaging with Stellaswap involves risks such as smart contract vulnerabilities, liquidity risks, and market volatility. Your assets may be subject to these risks when using Stellaswap. For more information, please review [Stellaswap's security documentation](https://docs.stellaswap.com/resources/security).

### **Final Note**

By engaging with the Euphrates platform and associated staking activities, you acknowledge and accept the risks outlined above. It is your responsibility to stay informed and make decisions that align with your risk tolerance. We recommend thoroughly reviewing all relevant documentation and conducting your own research to ensure you are fully aware of the potential risks involved.


# Contracts

{% content-ref url="/pages/f3f3q9hN7WGhZMv5Rinj" %}
[Contract Addresses](/other/contracts/contract-addresses)
{% endcontent-ref %}

{% content-ref url="<https://github.com/AcalaNetwork/EuphratesDoc/blob/main/other/contracts/interface-doc.md>" %}
<https://github.com/AcalaNetwork/EuphratesDoc/blob/main/other/contracts/interface-doc.md>
{% endcontent-ref %}


# Contract Addresses

| Contract                    | Address                                    | Code Verify                                                                                                  |
| --------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
| Wrapped tDOT(WTDOT)         | 0xe1bD4306A178f86a9214c39ABCD53D021bEDb0f9 | <https://blockscout.acala.network/address/0xe1bD4306A178f86a9214c39ABCD53D021bEDb0f9/contracts#address-tabs> |
| ProxyAdmin                  | 0x3F86533602Cae17d10173269ecB6Efce1d68D5ec | <https://blockscout.acala.network/address/0x3F86533602Cae17d10173269ecB6Efce1d68D5ec/contracts#address-tabs> |
| TransparentUpgradeableProxy | 0x7Fe92EC600F15cD25253b421bc151c51b0276b7D | <https://blockscout.acala.network/address/0x7Fe92EC600F15cD25253b421bc151c51b0276b7D/contracts#address-tabs> |
| implemention V1             | 0xBe44E43fE3817629d0cfA8CC0b73101d0F0FDE56 | <https://blockscout.acala.network/address/0xBe44E43fE3817629d0cfA8CC0b73101d0F0FDE56/contracts#address-tabs> |

* [code repo](https://github.com/AcalaNetwork/Euphrates)


# UpgradeableStakingLST

* [Source code](https://github.com/AcalaNetwork/Euphrates/blob/master/src/UpgradeableStakingLST.sol)

### **Staking-related Methods**

#### stake()

Staking share into staking pool.

```solidity
function stake(uint256 poolId, uint256 amount) external nonpayable returns (bool)
```

| Parameter | Type    | Description                    |
| --------- | ------- | ------------------------------ |
| poolId    | uint256 | The index of staking pool.     |
| amount    | uint256 | The share amount to be staked. |

#### unstake()

Withdraw share from staking pool.

```solidity
function unstake(uint256 poolId, uint256 amount) external nonpayable returns (bool)
```

| Parameter | Type    | Description                      |
| --------- | ------- | -------------------------------- |
| poolId    | uint256 | The index of staking pool.       |
| amount    | uint256 | The share amount to be un-staked |

\<aside> \<img src="/icons/info-alternate\_gray.svg" alt="/icons/info-alternate\_gray.svg" width="40px" /> If the pool has been converted, the withdrawn token should be the converted token. If the converted token is WTDOT, the retrieved token should be tDOT.

\</aside>

#### claimRewards()

Claim all rewards from staking pool.

```solidity
function claimRewards(uint256 poolId) external nonpayable returns (bool)
```

| Parameter | Type    | Description                |
| --------- | ------- | -------------------------- |
| poolId    | uint256 | The index of staking pool. |

#### exit()

Un-stake all staked share and claim all unclaimed rewards from staking pool.

```solidity
function exit(uint256 poolId) external nonpayable returns (bool)
```

| Parameter | Type    | Description                |
| --------- | ------- | -------------------------- |
| poolId    | uint256 | The index of staking pool. |

\<aside> \<img src="/icons/info-alternate\_gray.svg" alt="/icons/info-alternate\_gray.svg" width="40px" /> It is the order to execute `unstake` + `claimRewards`, if any event is banned, it will be reverted。

\</aside>

### Pool config-related Methods

#### **poolIndex**()

Get the index of next [pool.It](http://pool.It)’s equal to the current count of pools. This is zero by default.

```solidity
function poolIndex() external view returns (uint256)
```

\<aside> \<img src="/icons/info-alternate\_gray.svg" alt="/icons/info-alternate\_gray.svg" width="40px" /> This value will be incremented by 1 whenever `addPool`.

\</aside>

#### addPool()

Initialize a staking pool for `shareType`.

Can be called only by owner.

```solidity
function addPool(contract IERC20 shareType) external nonpayable
```

| Parameter | Type            | Description                                       |
| --------- | --------------- | ------------------------------------------------- |
| shareType | contract IERC20 | Initialize the ERC20 contract address of the pool |

#### **updateRewardRule()**

Update the reward rule of `rewardType` for `poolId` pool.

Can be called only by owner.

```solidity
function updateRewardRule(
	uint256 poolId, 
	contract IERC20 rewardType, 
	uint256 rewardRate, 
	uint256 endTime
) external nonpayable
```

| Parameter  | Type            | Description                   |
| ---------- | --------------- | ----------------------------- |
| poolId     | uint256         | The index of staking pool.    |
| shareType  | contract IERC20 | The reward token address.     |
| rewardRate | uint256         | The reward amount per second. |
| endTime    | uint256         | The end time of rule.         |

#### **rewardRules**()

Get the reward rule for `rewardType` reward of `poolId` pool.

```solidity
function rewardRules(uint256 poolId, contract IERC20 rewardType) external view returns (struct Staking.RewardRule)

struct RewardRule {
    // Reward amount per second.
    uint256 rewardRate;
    // The end time for reward accumulation.
    uint256 endTime;
    // Accumulated reward rate, this is used to calculate the reward amount of each staker.
    // It mul 1e18 to avoid loss of precision.
    uint256 rewardRateAccumulated;
    // The last time of this rule accumulates reward.
    uint256 lastAccumulatedTime;
}
```

| Parameter  | Type            | Description                |
| ---------- | --------------- | -------------------------- |
| poolId     | uint256         | The index of staking pool. |
| rewardType | contract IERC20 | The reward token address.  |

#### **setRewardsDeductionRate()**

Set deduction `rate` of claim rewards for `poolId` pool.

Can be called only by owner.

```solidity
function setRewardsDeductionRate(uint256 poolId, uint256 rate) external nonpayable
```

| Parameter | Type    | Description                      |
| --------- | ------- | -------------------------------- |
| poolId    | uint256 | The index of staking pool.       |
| rate      | uint256 | The deduction rate. 1e18 is 100% |

#### **rewardsDeductionRates**()

Get the rewards deduction rate of `poolId` pool.

```solidity
function rewardsDeductionRates(uint256 poolId) external view returns (uint256)
```

| Parameter | Type    | Description                |
| --------- | ------- | -------------------------- |
| poolId    | uint256 | The index of staking pool. |

\<aside> \<img src="/icons/info-alternate\_gray.svg" alt="/icons/info-alternate\_gray.svg" width="40px" /> The deduction rate. 1e18 is 100%

\</aside>

#### **shareTypes**()

Get the share token of `poolId` pool.

```solidity
function shareTypes(uint256 poolId) external view returns (contract IERC20)
```

| Parameter | Type    | Description                |
| --------- | ------- | -------------------------- |
| poolId    | uint256 | The pool id to be queried. |

#### **shares**()

Get the share amount of `who` of `poolId` pool.

```solidity
function shares(uint256 poolId, address who) external view returns (uint256)
```

| Parameter | Type    | Description                |
| --------- | ------- | -------------------------- |
| poolId    | uint256 | The pool id to be queried. |
| who       | address | The address of staker.     |

#### **totalShares**()

Get the total share amount of `poolId` pool.

```solidity
function totalShares(uint256 poolId) external view returns (uint256)
```

| Parameter | Type    | Description                |
| --------- | ------- | -------------------------- |
| poolId    | uint256 | The pool id to be queried. |

#### **earned**()

Get `who`'s unclaimed reward amount of specific `rewardType` at `poolId` pool.

| Parameter  | Type            | Description                |
| ---------- | --------------- | -------------------------- |
| poolId     | uint256         | The index of staking pool. |
| who        | address         | The address of staker.     |
| rewardType | contract IERC20 | The reward token address.  |

#### **rewardPerShare**()

Get the exchange rate for share to `rewardType` reward token of `poolId` pool.

*The reward part is accumulated rate adds pending to accumulate rate, it's used to calculate reward. 1e18 is 100%.*

```solidity
function rewardPerShare(uint256 poolId, contract IERC20 rewardType) external view returns (uint256)
```

| Parameter  | Type            | Description                |
| ---------- | --------------- | -------------------------- |
| poolId     | uint256         | The index of staking pool. |
| rewardType | contract IERC20 | The reward token address.  |

#### **rewardTypes**()

Get the reward token types of `poolId` pool.

```solidity
function rewardTypes(uint256 poolId) external view returns (contract IERC20[])
```

| Parameter | Type    | Description                |
| --------- | ------- | -------------------------- |
| poolId    | uint256 | The index of staking pool. |

#### **rewards**()

Get the unclaimed paid `rewardType` reward amount for `who` of `poolId` pool.

```solidity
function rewards(uint256 poolId, address who, contract IERC20 rewardType) external view returns (uint256)
```

| Parameter  | Type            | Description                |
| ---------- | --------------- | -------------------------- |
| poolId     | uint256         | The index of staking pool. |
| who        | address         | The address of staker.     |
| rewardType | contract IERC20 | The reward token address.  |

#### **lastTimeRewardApplicable**()

Get latest time that can be used to accumulate rewards for `rewardType` reward of `poolId` pool.

```solidity
function lastTimeRewardApplicable(uint256 poolId, contract IERC20 rewardType) external view returns (uint256)
```

| Parameter  | Type            | Description                |
| ---------- | --------------- | -------------------------- |
| poolId     | uint256         | The index of staking pool. |
| rewardType | contract IERC20 | The reward token address.  |

#### **paidAccumulatedRates**()

Get the paid accumulated rate of `rewardType` for `who` of `poolId` pool.

```solidity
	function paidAccumulatedRates(uint256 poolId, address who, contract IERC20 rewardType) external view returns (uint256)
```

| Parameter  | Type            | Description                |
| ---------- | --------------- | -------------------------- |
| poolId     | uint256         | The index of staking pool. |
| who        | address         | The address of staker.     |
| rewardType | contract IERC20 | The reward token address.  |

### Pool convert-related Methods

#### **convertLSTPool()**

convert the share token of ‘poolId’ pool to LST token by `convertType`.

```solidity
function convertLSTPool(uint256 poolId, enum UpgradeableStakingLSD.ConvertType convertType) external nonpayable

enum ConvertType {
		LCDOT2LDOT,
    LCDOT2TDOT,
    DOT2LDOT,
    DOT2TDOT,
    LCDOT2WTDOT,
    DOT2WTDOT
}
```

| Parameter   | Type                                   | Description                |
| ----------- | -------------------------------------- | -------------------------- |
| poolId      | uint256                                | The index of staking pool. |
| convertType | enum UpgradeableStakingLST.ConvertType | The convert type.          |

#### **convertInfos**()

Get the LSD conversion info of `poolId` pool.

```solidity
function convertInfos(uint256 poolId) external view returns (struct UpgradeableStakingLSD.ConvertInfo)

struct ConvertInfo {
    // The converted LSD token.
    IERC20 convertedShareType;
    // This is a snapshot of the ratio between share amount to new share token amount at the moment of conversion. 1e18 is 1:1
    uint256 convertedExchangeRate;
}
```

| Parameter | Type    | Description                |
| --------- | ------- | -------------------------- |
| poolId    | uint256 | The index of staking pool. |

\<aside> \<img src="/icons/info-alternate\_gray.svg" alt="/icons/info-alternate\_gray.svg" width="40px" /> If the pool has been converted, the withdrawn token should be the converted token. If the converted token is WTDOT, the retrieved token should be tDOT.

\</aside>

### Pool operation pause-related Methods

#### **setPoolOperationPause()**

Set the `paused` status of `operation` for `poolId` pool.

Can be called only by owner.

```solidity
function setPoolOperationPause(
	uint256 poolId, 
	enum PoolOperationPausable.Operation operation, 
	bool paused
) external nonpayable

enum Operation {
    Stake,
    Unstake,
    ClaimRewards
}
```

| Parameter | Type                                           | Description                |
| --------- | ---------------------------------------------- | -------------------------- |
| poolId    | uint256                                        | The index of staking pool. |
| operation | enum PoolOperationPausable.Operation operation | The user operation.        |
| paused    | bool                                           | The pause status.          |

#### **pausedPoolOperations**()

Get the pause status of `operation` for `poolId` pool.

```solidity
function pausedPoolOperations(uint256 poolId, enum PoolOperationPausable.Operation operation) external view returns (bool)

enum Operation {
    Stake,
    Unstake,
    ClaimRewards
}
```

| Parameter | Type                                           | Description                |
| --------- | ---------------------------------------------- | -------------------------- |
| poolId    | uint256                                        | The index of staking pool. |
| operation | enum PoolOperationPausable.Operation operation | The user operation.        |

### contract config-related Methods


# Governance

The owner of `ProxyAdmin` contract controls `TransparentUpgradeableProxy` upgrade. The owner of `TransparentUpgradeableProxy` has the authority to configure the parameters of Euphrates and pause/unpuase the whole `TransparentUpgradeableProxy` contract.&#x20;

Euphrates smart contract is integrated with Acala on-chain governance, where management of Euphrates such as initializing pools, and adjusting incentive rewards are under the jurisdiction of on-chain governance. With caution and prudence of this new innovation (governance of smart contract via Acala/Substrate on-chain governance), there is a multi-sig setup managed by the Acala Foundation, to pause the contracts in case of emergency. This may also be replaced by on-chain governance as we progress.

## Governance Methods

### addPool

```solidity
function addPool(contract IERC20 shareType) external nonpayable
```

Initialize a staking pool for `shareType`.

#### Parameters

| Name      | Type            | Description      |
| --------- | --------------- | ---------------- |
| shareType | contract IERC20 | The share token. |

### claimRewards

```solidity
function claimRewards(uint256 poolId) external nonpayable returns (bool)
```

Claim all rewards from staking pool.

#### Parameters

| Name   | Type    | Description                |
| ------ | ------- | -------------------------- |
| poolId | uint256 | The index of staking pool. |

### convertLSTPool

```solidity
function convertLSTPool(uint256 poolId, enum UpgradeableStakingLST.ConvertType convertType) external nonpayable
```

convert the share token of ‘poolId’ pool to LST token by `convertType`.

#### Parameters

| Name        | Type                                   | Description                |
| ----------- | -------------------------------------- | -------------------------- |
| poolId      | uint256                                | The index of staking pool. |
| convertType | enum UpgradeableStakingLST.ConvertType | The convert type.          |

### pause

```solidity
function pause() external nonpayable
```

Puase the contract by Pausable.

### setPoolOperationPause

```solidity
function setPoolOperationPause(uint256 poolId, enum PoolOperationPausable.Operation operation, bool paused) external nonpayable
```

Set the `paused` status of `operation` for `poolId` pool.

#### Parameters

| Name      | Type                                 | Description                |
| --------- | ------------------------------------ | -------------------------- |
| poolId    | uint256                              | The index of staking pool. |
| operation | enum PoolOperationPausable.Operation | The user operation.        |
| paused    | bool                                 | The pause status.          |

### setRewardsDeductionRate

```solidity
function setRewardsDeductionRate(uint256 poolId, uint256 rate) external nonpayable
```

Set deduction `rate` of claim rewards for `poolId` pool.

#### Parameters

| Name   | Type    | Description                      |
| ------ | ------- | -------------------------------- |
| poolId | uint256 | The index of staking pool.       |
| rate   | uint256 | The deduction rate. 1e18 is 100% |

### transferOwnership

```solidity
function transferOwnership(address newOwner) external nonpayable
```

*Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.*

#### Parameters

| Name     | Type    | Description |
| -------- | ------- | ----------- |
| newOwner | address | undefined   |

### unpause

```solidity
function unpause() external nonpayable
```

Unpuase the contract by Pausable.

*Define the `onlyOwner` access.*

### updateRewardRule

```solidity
function updateRewardRule(uint256 poolId, contract IERC20 rewardType, uint256 rewardRate, uint256 endTime) external nonpayable
```

Update the reward rule of `rewardType` for `poolId` pool.

*Override the inherited function to define `onlyOwner` and `whenNotPaused` access.*

#### Parameters

| Name       | Type            | Description                   |
| ---------- | --------------- | ----------------------------- |
| poolId     | uint256         | The index of staking pool.    |
| rewardType | contract IERC20 | The reward token.             |
| rewardRate | uint256         | The reward amount per second. |
| endTime    | uint256         | The end time of fule.         |


# Audits

Euphrates contracts are audited by PeckShield and related pallets are audited by SR Labs.

* [PeckShield report](https://github.com/AcalaNetwork/Euphrates/blob/master/audit/PeckShield-Audit-Report-Acala-Euphrates-v1.0.pdf)
* [SR Labs report](https://github.com/AcalaNetwork/Acala/blob/master/audit/SRL-Acala-2023-Audit.pdf)


