# Staking Workflow

<figure><img src="https://2591223895-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0x70K9i86BsAzDYDnzq2%2Fuploads%2FFQOZon7EbZbWlsecivwj%2Fimage.png?alt=media&#x26;token=298302a8-f09f-44f9-912d-da6e69fb097b" alt=""><figcaption></figcaption></figure>

## **Stake**

1-1. The user calls the contract's stake method to transfer USDT into the contract.

1-2. The user receives **USDT-pfUSDT-LP tokens** in return as proof of staking.

## **Swap**

2-1. The user can call the contract's swap method to exchange USDT for pfUSDT or vice versa.

* The swap method can specify a recipient address.
* **User exchanges for pfUSDT**:
  * **0% fee**
  * The exchangeable amount = The amount of pfUSDT available in the pool.
* **User exchanges for USDT**:
  * There is a redemption fee, which could be determined by a curve (fee model).
  * The exchangeable amount = The amount of USDT available in the pool.

2-2. The user receives **USDT or pfUSDT** in return.

## **Unstake**

3-1. The user calls the contract's unstake method to transfer **USDT-pfUSDT-LP tokens** back into the contract.

3-2. Based on the token quantity, the contract redeems a proportional amount of USDT or pfUSDT to the user.
