# Introduction

### What is bemo?

**bemo** is a non-custodial liquid staking protocol built on The Open Network (TON) blockchain. It is the first liquid staking application on TON that allows you to stake native GRAM tokens and, in return, get bmGRAM tokens which you can use freely in DeFi.

The price of the bmGRAM token to GRAM increases with the staking rewards accrued after each validation round by **bemo** protocol.

### Who is behind bemo?

The creation of **bemo** was led by a diverse, skilled team. We are traditional finance professionals, blockchain experts, and software developers. We share a common goal of building investment products that would add value to every user, whether new or native to blockchain.

\
**bemo** smart contracts were developed by the team standing behind the first retail project launched on the TON - [Fanzee](https://fanz.ee/), an innovative sports fan engagement platform. The tech team has seven years of experience building blockchain platforms and applications.


# What is liquid staking?

The **bemo** application provides a simplified, user-friendly way for GRAM token holders to earn rewards and maintain liquidity via liquid staking.&#x20;

Liquid staking removes traditional staking limitations, allowing users to stake any token amount, keep their assets liquid, and earn extra returns using bmGRAM tokens in DeFi.<br>


# TON staking

The Open Network (TON) is a Proof of Stake (POS) consensus algorithm blockchain. By staking on a POS network, token holders delegate their token rights to validators who authorise blockchain transactions. bemo application is designed to unlock the benefits of staking for every GRAM token holder.


# Staking limitations

GRAM tokens holder faces several staking limitations:

**Knowledge base** – Staking requires a knowledge base on POS principles and blockchain architecture, thus significantly reducing the addressable market.

**Technical requirements** – Running a validation node requires high-performance hardware, constant uptime, system administration resources, and experience.

**Significant stake** – Current minimum amount of tokens that would allow you to run a validator's node is 600,000 GRAM tokens. The amount is reduced to 10,000 if you are joining a pool.&#x20;

**Illiquidity** – After being staked, the tokens are locked up, and holders have no access to the funds until the tokens are unstaked at the end of the relevant validation round. Partially these problems are addressed by “staking as a service” providers, but the assets stay illiquid for the whole staking period.


# Liquid staking

In contrast to staking, the liquid staking protocol allows users to:

* easily earn blockchain validation rewards
* stake smaller token amounts
* maintain tokens liquidity
* generate an extra return on the assets&#x20;

TON holders can deposit their tokens with the **bemo** application and receive bmGRAM tokens in return. These tokens are stored in the user's wallet and can be transferred, traded, or used for yield enhancement in decentralized finance.

Users no longer have to choose between staking rewards and alternative DeFi opportunities.


# bemo benefits

We believe staking yield is an essential property of a native POS token. **bemo** liquid staking was created to promote easy access and widespread adoption of this risk-free yield on the TON blockchain.

To overcome the fundamental shortcomings of staking on the TON blockchain, we have focused on these features:

**An easy-to-use app**. **bemo** allows users to stake GRAM tokens in a UI-friendly application — no more need to have a technology knowledge base or experience running the validation nodes. Staking is just a click away.

**No minimum stake requirement**. **bemo** app allows users to stake any amount of GRAM. Though there are no limitations, users should consider transactional cost as it can significantly impact APY. We recommend staking from 10 GRAM tokens.&#x20;

**Liquidity preservation**. We focus on enabling users to maintain their assets' liquidity while receiving staking rewards. bmGRAM tokens are fully liquid and ready for transaction at any time.

**Extra return opportunities**. Using bmGRAM tokens in DeFi, users can get additional returns on their assets, keeping the staking rewards at all times. **bemo** is actively contributing to the development of new products and opportunities.


# How bemo works

Protocol overview

bemo protocol is a set of smart contracts on the TON blockchain.

These contracts are responsible for:

* TON deposits and withdrawals
* Minting and burning of the bmGRAM tokens
* Transfer of GRAM tokens to the participating validators
* Receipt of the staking fees
* Validation and protocol fee calculation and distribution
* bmGRAM vs GRAM price and exchange rate calculation

Key components of **bemo** are the application’s set of smart contracts and the bmGRAM token.


# Staking

Users deposit the tokens using the *‘Stake’* function in the bemo application. After confirming the GRAM deposit transaction from their wallet application, users receive bmGRAM tokens, representing their share in the TON tokens pool of the application.

The amount of the bmGRAM tokens received is calculated by the smart contract’s algorithm based on the user’s GRAM staked amount and bmGRAM/GRAM exchange rate.&#x20;

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


# Validation

After GRAM tokens have been pooled in the smart contract, they are distributed between the participating validating nodes.&#x20;

Participating nodes engage in validation rounds to approve TON blockchain transactions and receive network rewards after each one.&#x20;

Once the reward is received, the application automatically deducts a service fee. The reward, excluding the fee, is added directly to the **bemo** GRAM tokens pool, increasing its GRAM value.

&#x20;As the value of the **bemo** GRAM pool grows, so does the GRAM price of bmGRAM, your share in this pool.

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


# Unstaking

Users can request GRAM withdrawal using the *‘Unstake’* function in the application.&#x20;

After the unstaking is initiated, a cooldown period countdown starts. The unstaking cooldown lasts 36 to 72 hours and is subject to the validation round phase and duration.

bmGRAM will be exchanged for GRAM tokens after the cooldown period. The amount of GRAM tokens to be withdrawn will be calculated by the smart contract algorithm based on the user’s bmGRAM unstaked amount and bmGRAM/GRAM exchange rate.&#x20;

Users can claim the requested GRAM tokens at any time after the expiration of the cooldown period.

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


# bmGRAM

**bmGRAM** is a liquid token representing your share of the total GRAM pool deposited into **bemo v2**.&#x20;

Its design as a value-accruing token means that its price appreciates due to staking rewards, while the quantity of tokens stays unchanged. Over time, your deposited GRAMs earn staking rewards, and the value of your bmGRAM appreciates.&#x20;


# bmGRAM explained

The smart contract determines the price of bmGRAM to GRAM after each validation round. It is calculated by adding the total GRAMs deposited and staking rewards, subtracting fees, and then dividing this result by the minted bmGRAMs. This formula eliminates the need for oracles since the underlying asset and staking rewards are denominated in GRAMs.

Every bmGRAM holder can unstake their tokens at any time, following a cooldown period of 36 to 72 hours. They will receive their GRAMs and the accumulated rewards.

**bmGRAM is fully backed by the bemo stake pool, ensuring there is no possibility of a fundamental depeg within the app.**

The smart contract defines the Fundamental price, representing the intrinsic value of bmGRAM. The market price is driven by supply and demand dynamics on exchanges where bmGRAM is traded. Any Market price depeg creates an arbitrage opportunity as the unstaking option is always available on the bemo application.

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

## Example

You deposit 100 TONs into bemo finance, receiving 100 bmTONs in return. The exchange rate is 1 stTON to 1 TON at the time of this deposit. TON Pool now consists of 100 TONs.

Over time, bemo accumulates a staking reward of 5%. This reward is added to the TON pool, increasing its total value by 5 TONs. As a result, the TON pool now contains 105 TONs.

However, despite the growth of the TON pool, your bmTON balance remains unchanged at 100 bmTONs. What does change is the value of each stTON. The value of 1 bmTON increases by 5% to 1.05 TONs.


# bmGRAM pricing

bmGRAM/GRAM token price is continuously calculated by the formulas.&#x20;

Staking GRAM:

> `bmGRAM amount = GRAM staked / bmGRAM price`

Unstaking bmGRAM:

> `GRAM amount = bmGRAM unstaked * bmGRAM price`

bmGRAM is priced by **bemo** in GRAM tokens and is calculated by the formula:

> `bmGRAM price = (gram_pool + staking_reward - bemo_fee) / ton_pool`

`ton_pool` – GRAM tokens in the pool \
`staking_reward` – bemo validation rewards

\
The bmGRAM app price accounts for the reward accumulated after each validation round.&#x20;

Due to the nature of staking, the bmGRAM app price is constantly growing. The staked token price growth rate equals the TON blockchain staking yield ex **bemo** protocol fees.

**bemo** application fee equals twenty percent of the TON blockchain staking rewards. The fee includes the validation and the application services and is charged after every validation round.


# stGRAM

{% hint style="warning" %}
stGRAM is now available only for holding and unstaking, you cannot mint it. The actual Bemo LST is bmGRAM. Follow this link for more information: [bmGRAM section](/welcome-to-bemo/bmgram).
{% endhint %}

stGRAM is a liquid token representing your share of the total GRAM pool deposited into **bemo v1**.&#x20;

Its design as a value-accruing token means that its price appreciates due to staking rewards while the quantity of tokens stays unchanged. Over time, your deposited GRAMs earn staking rewards, and the value of your stGRAM appreciates.&#x20;


# stGRAM explained

{% hint style="warning" %}
stGRAM is now available only for holding and unstaking, you cannot mint it. The actual Bemo LST is bmGRAM. Follow this link for more information: [bmTON section](/welcome-to-bemo/bmgram).
{% endhint %}

The smart contract determines the price of stGRAM to GRAM after each validation round. It is calculated by adding the total GRAMs deposited and staking rewards, subtracting fees, and then dividing this result by the minted stGRAMs. This formula eliminates the need for oracles since the underlying asset and staking rewards are denominated in GRAMs.

Every stGRAM holder can unstake their tokens at any time, following a cooldown period of 36 to 72 hours. They will receive their GRAMs and the accumulated rewards.

**stGRAM is fully backed by the bemo stake pool, ensuring there is no possibility of a fundamental depeg within the app.**

The smart contract defines the Fundamental price, representing the intrinsic value of stGRAM. The market price is driven by supply and demand dynamics on exchanges where stGRAM is traded. Any Market price depeg creates an arbitrage opportunity as the unstaking option is always available on the bemo application.

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

## Example

You deposit 100 GRAMs into bemo finance, receiving 100 stGRAMs in return. The exchange rate is 1 stGRAM to 1 GRAM at the time of this deposit. GRAM Pool now consists of 100 GRAMs.

Over time, bemo accumulates a staking reward of 5%. This reward is added to the GRAM pool, increasing its total value by 5 GRAMs. As a result, the GRAM pool now contains 105 GRAMs.

However, despite the growth of the GRAM pool, your stGRAM balance remains unchanged at 100 stGRAMs. What does change is the value of each stGRAM. The value of 1 stGRAM increases by 5% to 1.05 GRAMs.

<br>


# stGRAM pricing

{% hint style="warning" %}
stGRAM is now available only for holding and unstaking, you cannot mint it. The actual Bemo LST is bmGRAM. Follow this link for more information: [bmGRAM section](/welcome-to-bemo/bmgram).
{% endhint %}

stGRAM/GRAM token price is continuously calculated by the formulas.&#x20;

Staking GRAM:

> `stGRAM amount = GRAM staked / stGRAM price`

Unstaking stGRAM:

> `GRAM amount = stGRAM unstaked * stGRAM price`

stGRAM is priced by **bemo** in GRAM tokens and is calculated by the formula:

> `stGRAM price = (gram_pool + staking_reward - bemo_fee) / gram_pool`

`gram_pool` – GRAM tokens in the pool \
`staking_reward` – bemo validation rewards

\
The stGRAM app price accounts for the reward accumulated after each validation round.&#x20;

Due to the nature of staking, the stGRAM app price is constantly growing. The staked token price growth rate equals the TON blockchain staking yield ex **bemo** protocol fees.

**bemo** application fee equals twenty percent of the TON blockchain staking rewards. The fee includes the validation and the application services and is charged after every validation round.


# DEVELOPERS


# bemo v1 (deprecated)


# Stake

This section describes how to stake.

#### Overview

In **Financial** contract there is an op-code `OP::SIMPLE_TRANSFER`. It's used to perform staking of GRAM in the contract, resulting in the creation of a corresponding amount of stGRAM in exchange for the staked GRAM. The current pools of stGRAM and GRAM are taken into account, allowing the calculation of the amount of stGRAM to be created dynamically. If the operation is successful, the total supply of stGRAM and GRAM is updated, and the newly minted stGRAM jettons are sent to the user's wallet address.

* `OP::SIMPLE_TRANSFER`: Calls the mint function with a `query_id` of `0`. It is a simple invocation that doesn’t pass any extra data.

When a user stakes a certain amount of GRAM, the number of stGRAM to be minted is determined based on the existing stGRAM and GRAM pools.

The number of stGRAM minted is calculated using the formula:&#x20;

`stake_jetton_amount = jetton_total_supply * stake_ton_amount / ton_total_supply`

Where:

* `jetton_total_supply` is the total supply of stGRAM jettons before staking.
* `ton_total_supply` is the total amount of staked GRAM before the staking operation.
* `stake_ton_amount` is the amount of GRAM to be staked after subtracting any relevant fees (`int stake_ton_amount = msg_value - DEPOSIT_PROCESSING_FEE` .

#### Steps to verify the result of staking operation:

To ensure the staking operation was executed correctly, follow these steps:

1. **Check the updated stGRAM and GRAM total supply in the Financial contract:**

* Verify that the `jetton_total_supply` has increased by the calculated `stake_jetton_amount`.
* Ensure that the `ton_total_supply` has increased by `stake_ton_amount`.

2. **Confirm the transfer of stGRAM:**

* The minted stGRAM should be sent to the user’s jetton wallet address. Verify that the correct amount was transferred.
* The transaction should use the `OP::INTERNAL_TRANSFER`, and the `query_id` be `0`.

**Common errors that may occur during processing `OP::SIMPLE_TRANSFER`**

When performing operations in a smart contract, various errors can occur due to incorrect input, insufficient funds, or other issues. To handle these errors effectively, it’s important to understand what kind of errors might arise, how to catch them, and how to determine the underlying issue. Below is a detailed guide on common errors, how to detect them, and troubleshooting strategies.

1. `ERROR::INSUFFICIENT_MSG_VALUE`
   * **Cause**: This error occurs when the provided message value is less than the required amount to perform the operation. Message value must be greater than 0.05 GRAM (`DEPOSIT_PROCESSING_FEE)` .
   * **How to Detect**: Check if the contract throws this error when the condition `msg_value - DEPOSIT_PROCESSING_FEE <= 0` is true.
   * **Troubleshooting**: Ensure that the amount sent in the transaction is enough to cover the required fees and the intended operation.
2. `ERROR::NOT_WORKCHAIN`
   * **Cause**: This error happens when the message is sent from a non-basechain workchain (i.e., not workchain 0). The contract may be designed to only accept transactions from the main chain.
   * **How to Detect**: The contract checks if the sender’s workchain is not equal to 0 and throws this error if true.
   * **Troubleshooting**: Ensure that the transaction is being sent from the basechain (workchain = 0). Verify the sender address and ensure that it matches the expected workchain for the operation.

#### Example of sending stake message using pytoniq:

So, to create a payload cell you need to provide the following params:

* `OP::SIMPLE_TRANSFER` (`0`) - The operation code indicating the type of operation. Represented by a 32-bit unsigned integer

Or you can just send GRAM attached to the empty message to the **Financial** contract

**Let's write a simple code that builds payload cell and sends message to Financial:**

```
from pytoniq import WalletV4R2, LiteBalancer, begin_cell
import asyncio
mnemonics = ["your", "mnemonics", "here"]

async def main():
    provider = LiteBalancer.from_mainnet_config(1)
    await provider.start_up()

    OP_SIMPLE_TRANSFER = 0

    FINANCIAL_ADDRESS = "EQDNhy-nxYFgUqzfUzImBEP67JqsyMIcyk2S5_RwNNEYku0k"

    stake_msg = begin_cell()\
        .store_uint(OP_SIMPLE_TRANSFER, 32)\
    .end_cell()

    ton_to_stake = 100  # example value
    wallet = await WalletV4R2.from_mnemonic(provider=provider, mnemonics=mnemonics)
    await wallet.transfer(destination=FINANCIAL_ADDRESS,
                          amount=int(ton_to_stake*1e9),
                          body=stake_msg)

    await provider.close_all()

asyncio.run(main())
```


# Unstake

This section describes how to unstake.

#### Overview

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

To unstake user needs to send message with `OP::BURN` to its **Jetton Wallet** and specify amount of stGRAM to burn. The TL-B scheme of burn request is following:

```
burn#595f07bc query_id:uint64 jetton_amount:Coins = InternalMsgBody;
```

Then message with `OP::BURN_NOTIFICATION` comes from **Jetton Wallet** to **Financial** contract. **Financial** checks that sender is valid and message has enough TON for burn notification and if everything is correct it deploys **Unstake Request** contract with user address (`owner_address`) and `withdraw_ton_amount` (`int withdraw_ton_amount = muldiv(ton_total_supply, withdraw_jetton_amount, jetton_total_supply)`). To retrieve `ton_total_supply` and `jetton_total_supply` (if needed) you have to invoke `get_full_data` method in **Financial** contract:

```
// TL-B:
get_full_data#_ = (
    jetton_total_supply:Coins 
    ton_total_supply:Coins 
    commission_total_supply:Coins
    commission_factor:uint16
    commission_address:MsgAddressInt
    admin_address:MsgAddressInt
    transaction_address:MsgAddressInt
    content:^Cell
    jetton_wallet_code:^Cell
    unstake_request_code:^Cell
    last_lockup_epoch:uint32
    lockup_supply:Coins
    next_lockup_supply:Coins
    later_lockup_supply:Coins
    next_unstake_request_index:uint64
)
```

The TL-B scheme of burn notification is following:

```
burn_notification#7bdd97de query_id:uint64 withdraw_jetton_amount:Coins owner_address:MsgAddressInt = InternalMsgBody;
```

After **Unstake Request** is deployed, anyone can send message to it. Contract checks that unlock timestamp has passed and if everything is correct it sends message to **Financial** with `OP::UNSTAKE`, ton amount, jetton amount (currently unused) and user address. The TL-B scheme of this message is following:

```
unstake#0000000a index:uint64 owner:MsgAddressInt withdraw_ton_amount:Coins withdraw_jetton_amount:Coins = InternalMsgBody;
```

Then **Financial** contract checks that its balance is enough (`balance - MIN_TON_FOR_STORAGE >= withdraw_ton_amount`) and if this condition is correct it empty message with value equal to `unstake_amount` (`withdraw_ton_amount + msg_value - (storage_fee + LOCKUP_GAS_CONSUMPTION + UNSTAKE_GAS_CONSUMPTION`) to user.

Otherwise, it sends message back to **Unstake Request**. The TL-B scheme of this message is following:

```
return_unstake_request#00000065 unlock_timestamp:uint32 = InternalMsgBody;
```


# Tracking unstake requests

This section describes how to tarck unstake requests.

1. **Monitor Events on the Blockchain**

The unstake request process typically involves sending a transaction to the smart contract that initiates the unstaking. The contract may emit events (messages) related to the **Unstake Request**, which can be tracked on the blockchain. Look for events such as:

* `OP::UNSTAKE`: When the **Unstake Request** is initiated, a message with the `OP::UNSTAKE` operation code will be sent. This message will contain details about the unstake request, such as the amount of TON and jettons to be unstaked (currently unused), the owner's address, and the index of the request.

2. **Invoke** **`get_unstake_data()`** **method in** **Unstake Request** contract. By invoking this method you can retrieve the details of an unstake request. When **Unstake Request** sends message to **Financial** with `OP::UNSTAKE` it sets `unlock_timestamp` equal to `0`.


# How to get GRAM-stGRAM rate

This section describes how to get stTON  rate.

The fundamental GRAM-stGRAM rate is calculated using the formula:

**`stGRAM rate = ton_total_supply / jetton_total_supply`**

To retrieve `ton_total_supply`  and `jetton_total_supply` you need to invoke '**get\_full\_data**' method in **Financial** contract:

```
// TL-B:
get_full_data#_ = (
    jetton_total_supply:Coins 
    ton_total_supply:Coins 
    commission_total_supply:Coins
    commission_factor:uint16
    commission_address:MsgAddressInt
    admin_address:MsgAddressInt
    transaction_address:MsgAddressInt
    content:^Cell
    jetton_wallet_code:^Cell
    unstake_request_code:^Cell
    last_lockup_epoch:uint32
    lockup_supply:Coins
    next_lockup_supply:Coins
    later_lockup_supply:Coins
    next_unstake_request_index:uint64
)
```

<https://tonviewer.com/EQDNhy-nxYFgUqzfUzImBEP67JqsyMIcyk2S5_RwNNEYku0k?section=method>

See the screenshot:

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

These two values `0x2524443fb29fa1` and `0x275f0f797cee6d` are hexadecimal representations of `jetton_total_supply` and `ton_total_supply` . To convert them to decimal and compute the stGRAM price, you can use the following code in Python:

```
jetton_total_supply = int("0x2524443fb29fa1", 16)
ton_total_supply = int("0x275f0f797cee6d", 16)
```

**Here is an example in Python:**

```
from pytoniq import LiteClient

async with LiteClient.from_mainnet_config(trust_level=2) as client:
   result = await client.run_get_method(
       address="EQDNhy-nxYFgUqzfUzImBEP67JqsyMIcyk2S5_RwNNEYku0k",
       method="get_full_data",
       stack=[],
   )
stton_price_in_ton = result[1]/result[0]
```

<br>


# bemo v2


# Stake

This section describes how to stake.

**Overview**

In **Financial** contract there're op-codes `OP::SIMPLE_TRANSFER` and `OP::STAKE`. They're used to perform staking of GRAM in the contract, resulting in the creation of a corresponding amount of bmGRAM in exchange for the staked GRAM. The current pools of bmGRAM and GRAM are taken into account, allowing the calculation of the amount of bmGRAM to be created dynamically. If the operation is successful, the total supply of bmGRAM and GRAM is updated, and the newly minted bmGRAM jettons are sent to the user's wallet address.

* `OP::SIMPLE_TRANSFER`: Calls the mint function with a `query_id` of `0` and null for the `forward_payload`. It is a simple invocation that doesn’t pass any extra data aside from `msg_value` and `fwd_fee`.
* `OP::STAKE`: Calls the mint function with a `query_id` (provided in `in_msg_body`), a `forward_ton_amount` (specified TON amount to forward) and a `forward_payload` (optional cell for forwarding additional data). These parameters enable more complex interactions, such as sending additional data for use in staking-related functions.

When a user stakes a certain amount of GRAM, the number of bmGRAM jettons to be minted is determined based on the existing bmGRAM and GRAM pools.

The number of bmGRAM minted is calculated using the formula:

&#x20;`stake_jetton_amount = jetton_total_supply * stake_ton_amount / ton_total_supply`&#x20;

Where:

* `jetton_total_supply` is the total supply of bmGRAM before staking.
* `ton_total_supply` is the total amount of staked GRAM before the staking operation.
* `stake_ton_amount` is the amount of GRAM to be staked after subtracting any relevant fees (`int stake_ton_amount = msg_value - get_ton_amount_for_stake(forward_ton_amount, fwd_fee)`).

**TL-B scheme for stake message**

```
stake#4253c4d5 query_id:uint64 forward_ton_amount:Coins forward_payload:(Either Cell ^Cell) = InternalMsgBody;
```

**Steps to verify the result of the** **staking operation:**

To ensure the staking operation was executed correctly, follow these steps:

1. **Check the updated bmGRAM and GRAM pools:**

* Verify that the `jetton_total_supply` has increased by the `calculated stake_jetton_amount`.
* Ensure that the `ton_total_supply` has increased by `stake_ton_amount`.

2. **Confirm the transfer of bmGRAM:**

* The minted bmGRAM should be sent to the user’s jetton wallet address. Verify that the correct amount was transferred.
* The transaction should use the `OP::INTERNAL_TRANSFER`, and the `query_id` should match the identifier in the staking request.

**Validate any additional data transfers:**

* If the staking operation included forwarding any additional payload (`forward_payload`), ensure that it was correctly forwarded with the transfer.

**Common errors that may occur during processing `OP::STAKE` and `OP::SIMPLE_TRANSFER`**&#x20;

When performing operations in a smart contract, various errors can occur due to incorrect input, insufficient funds, or other issues. To handle these errors effectively, it’s important to understand what kind of errors might arise, how to catch them, and how to determine the underlying issue. Below is a detailed guide on common errors, how to detect them, and troubleshooting strategies.

1. `ERROR::INSUFFICIENT_MSG_VALUE`
   * **Cause**: This error occurs when the provided message value is less than the required amount to perform the operation. For example, the amount of GRAM sent may not be enough to cover the staking amount after subtracting fees.
   * **How to Detect**: Check if the contract throws this error when the condition `msg_value < required_amount` is true.
   * **Troubleshooting**: Ensure that the amount sent in the transaction is enough to cover the required fees and the intended operation. Recalculate the required amount based on the operation and include enough extra funds for transaction fees.
2. `ERROR::NOT_BASECHAIN`
   * **Cause**: This error happens when the message is sent from a non-basechain workchain (i.e., not workchain 0). The contract may be designed to only accept transactions from the main chain.
   * **How to Detect**: The contract checks if the sender’s workchain is not equal to 0 and throws this error if true.
   * **Troubleshooting**: Ensure that the transaction is being sent from the basechain (workchain = 0). Verify the sender address and ensure that it matches the expected workchain for the operation.

#### Example of sending stake message using pytoniq <a href="#user-content-example-of-sending-stake-message-using-pytoniq" id="user-content-example-of-sending-stake-message-using-pytoniq"></a>

So, to create a payload cell you need to provide the following params:

* `OP::STAKE` (`0x4253c4d5`) - The operation code indicating the type of operation. Represented by a 32-bit unsigned integer
* `query_id` - A unique identifier for the request, used for tracking the operation. It is a 64-bit unsigned integer that should be unique for each transaction.
* `forward_ton_amount` - The amount of GRAM to be forwarded in another message or included in the response. This amount is excluded from the staking calculation.
* `forward_payload` - An optional payload that can be included in the message to be forwarded. This data will be passed along with the forwarding message.

Or you can just send TON attached to the empty message to the **Financial** contract

**Let's write a simple code that builds payload cell and sends message to Financial:**

```
from pytoniq import WalletV4R2, LiteBalancer, begin_cell
import asyncio
mnemonics = ["your", "mnemonics", "here"]

async def main():
    provider = LiteBalancer.from_mainnet_config(1)
    await provider.start_up()

    OP_STAKE = 0x4253c4d5

    FINANCIAL_ADDRESS = "EQCSxGZPHqa3TtnODgMan8CEM0jf6HpY-uon_NMeFgjKqkEY"

    stake_msg = begin_cell()\
        .store_uint(OP_STAKE, 32)\
        .store_uint(123, 64)\   # example query_id, should be unique for each request
        .store_coins(int(0.01*1e9))\
    .end_cell()

    ton_to_stake = 100  # example value
    wallet = await WalletV4R2.from_mnemonic(provider=provider, mnemonics=mnemonics)
    await wallet.transfer(destination=FINANCIAL_ADDRESS,
                          amount=int(ton_to_stake*1e9),
                          body=stake_msg)

    await provider.close_all()

asyncio.run(main())

```


# Unstake

This section describes how to unstake.

**Overview**

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

To unstake user needs to send message with `OP::BURN` to its **Jetton Wallet** and specify amount of bmGRAM to burn. The TL-B scheme of burn request is following:

```
burn#595f07bc query_id:uint64 jetton_amount:Coins forward_payload:(Maybe ^Cell) = InternalMsgBody;
```

Then message with `OP::BURN_NOTIFICATION` comes from **Jetton Wallet** to **Financial** contract. **Financial** checks that sender is valid and message has enough GRAM for burn notification and if everything is correct it deploys **Unstake Request** contract with user address (`owner_address`) and `withdraw_ton_amount` (`int withdraw_ton_amount = muldiv(ton_total_supply, withdraw_jetton_amount, jetton_total_supply)`). To retrieve `ton_total_supply` and `jetton_total_supply` (if needed) you have to invoke `get_full_data` method in **Financial** contract:

```
// TL-B:
get_full_data#_ = (
    jetton_total_supply:Coins 
    ton_total_supply:Coins 
    commission_total_supply:Coins
    commission_factor:uint16
    commission_address:MsgAddressInt
    admin_address:MsgAddressInt
    transaction_address:MsgAddressInt
    content:^Cell
    jetton_wallet_code:^Cell
    unstake_request_code:^Cell
    last_lockup_epoch:uint32
    lockup_supply:Coins
    next_lockup_supply:Coins
    later_lockup_supply:Coins
    next_unstake_request_index:uint64
)
```

The TL-B scheme of burn notification is following:

```
burn_notification#7bdd97de query_id:uint64 withdraw_jetton_amount:Coins owner_address:MsgAddressInt receiver_address:MsgAddressInt forward_payload:(Maybe ^Cell) = InternalMsgBody;
```

After **Unstake Request** is deployed, anyone can send message to it. Contract checks that unlock timestamp has passed and if everything is correct it sends message to **Financial** with `OP::UNSTAKE`, ton amount, jetton amount (currently unused) and user address. The TL-B scheme of this message is following:

```
unstake#492ab1b3 index:uint64 owner:MsgAddressInt ton_amount:Coins jetton_amount:Coins forward_payload:(Maybe ^Cell) = InternalMsgBody;
```

Then **Financial** contract checks that its balance is enough (`balance >= withdraw_ton_amount + msg_value`) and if this condition is correct it sends message with `OP::UNSTAKE_NOTIFICATION` and value equal to `unstake_amount - storage_fee` to user. The TL-B scheme of this message is following:

```
unstake_notification#90c80a07 query_id:uint64 forward_payload:(Maybe ^Cell) = InternalMsgBody;
```

Otherwise, it sends message back to **Unstake Request**. The TL-B scheme of this message is following:

```
return_unstake_request#38633538 unlock_timestamp:uint32 = InternalMsgBody;
```


# Tracking unstake requests

This section describes how to tarck unstake requests.

1. **Monitor Events on the Blockchain**

The unstake request process typically involves sending a transaction to the smart contract that initiates the unstaking. The contract may emit events (messages) related to the **Unstake Request**, which can be tracked on the blockchain. Look for events such as:

* `OP::UNSTAKE`: When the **Unstake Request** is initiated, a message with the `OP::UNSTAKE` operation code will be sent. This message will contain details about the unstake request, such as the amount of GRAM and jettons (currently unused) to be unstaked, the owner's address, and the index of the request.

2. **Invoke** **`get_unstake_data()`** **method in** **Unstake Request** contract. By invoking this method you can retrieve the details of an unstake request. When **Unstake Request** sends message to **Financial** with `OP::UNSTAKE` it sets `unlock_timestamp` equal to `0`.


# How to get GRAM-bmTON rate

There are two ways to obtain TON-bmTON rate: on-chain and off-chain

The fundamental GRAM-bmGRAM rate is calculated using the formula:

**`bmTON rate = ton_total_supply / jetton_total_supply`**&#x20;

**On-chain:**

To fetch `ton_total_supply` and `jetton_total_supply` on-chain, send a message to the **Financial** contract with the following TL-B layout:

```
// TL-B:
provide_current_quote#ad83913f 
query_id:uint64 
custom_payload:(Maybe ^Cell) 
= InternalMsgBody;
```

The **Financial** contract will respond with:

```
// TL-B
take_current_quote#0a420458 
query_id:uint64 
ton_total_supply:uint128 
jetton_total_supply:uint128 
custom_payload:(Maybe ^Cell) 
= InternalMsgBody;
```

**Off-chain:**

To retrieve `ton_total_supply`  and `jetton_total_supply` you need to invoke '**get\_full\_data**' method in **Financial** contract:

```
// TL-B:
get_full_data#_ = (
    jetton_total_supply:Coins 
    ton_total_supply:Coins 
    commission_total_supply:Coins
    commission_factor:uint16
    commission_address:MsgAddressInt
    admin_address:MsgAddressInt
    transaction_address:MsgAddressInt
    content:^Cell
    jetton_wallet_code:^Cell
    unstake_request_code:^Cell
    last_lockup_epoch:uint32
    lockup_supply:Coins
    next_lockup_supply:Coins
    later_lockup_supply:Coins
    next_unstake_request_index:uint64
)
```

<https://tonviewer.com/EQCSxGZPHqa3TtnODgMan8CEM0jf6HpY-uon_NMeFgjKqkEY?section=method>

See the screenshot:

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

These two values `0x2524443fb29fa1` and `0x275f0f797cee6d` are hexadecimal representations of `jetton_total_supply` and `ton_total_supply` . To convert them to decimal and compute the bmGRAM price, you can use the following code in Python:

```
jetton_total_supply = int("0x2524443fb29fa1", 16)
ton_total_supply = int("0x275f0f797cee6d", 16)
```

**Here is an example in Python:**

```
from pytoniq import LiteClient

async with LiteClient.from_mainnet_config(trust_level=2) as client:
   result = await client.run_get_method(
       address="EQCSxGZPHqa3TtnODgMan8CEM0jf6HpY-uon_NMeFgjKqkEY",
       method="get_full_data",
       stack=[],
   )
bmton_price_in_ton = result[1]/result[0]                                     
```


# How to stake GRAM

### **Step 1**

* Visit [app.bemo.finance](https://app.bemo.finance/)
* Find and click the “Connect wallet” button in the application

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

### **Step 2**

Select the wallet application you use to store GRAM tokens from the list to connect it to **bemo**.

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

### **Step 3**

If Tonkeeper is selected, follow these steps

* Scan the QR code on the screen
* Connection request pops up, confirm the wallet connection to **bemo**

Your wallet is now connected!

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

### **Step 4**

Enter the GRAM tokens amount you want to stake and click the “Stake” button in the app.

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

### Step 5&#x20;

Confirm the transaction in your wallet.

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


# FAQ

**What is bemo?**\
bemo is a decentralized liquid staking application built on the TON blockchain. It enables users to stake their GRAM tokens, earn staking rewards, and receive bmGRAM tokens that can be traded or used in various DeFi applications.<br>

**What are the benefits of using bemo?**\
bemo allows users to stake GRAM tokens, earn rewards and maintain liquidity. Users don't have to lock their GRAM tokens to earn staking rewards. Most importantly, they don’t need to choose between staking rewards and alternative DeFi opportunities anymore. bemo users can enjoy both: earning a commission by providing liquidity on DEXes or farming favourite project’s tokens while compounding GRAM staking rewards.<br>

**What are bmGRAM tokens?**\
bmGRAM tokens are minted by the bemo application in exchange for the user’s GRAM tokens deposit. stGRAM tokens are burned after the unstaking is finalised. stGRAM tokens are value-accruing tokens used in the bemo finance system. Their value increases with staking rewards while their quantity remains constant.<br>

**How is the price of bmGRAM determined?**\
bmTON price is calculated by a formula in a smart contract based on the total TONs deposited, staking rewards, fees, and minted bmGRAMs. See [bmGRAM pricing page](/welcome-to-bemo/bmgram/bmgram-pricing).<br>

**Can I unstake my GRAM tokens?**\
Yes, you can unstake your GRAM tokens in the application anytime. However, there is a cooldown period of up to 72 hours. After submitting the unstaking request, you must wait for this period before your GRAMs and accrued rewards are released.

**What happens when I swap my bmGRAM for GRAM?**\
When you sell or swap your bmGRAM for GRAM on a DEX, you transfer your staking withdrawal rights to another user. This means you're converting your bmGRAM into GRAM at the current Market price.<br>

**Can there be a depeg of bmGRAM to GRAM?**\
Fundamentally, no, because the bmGRAM price is calculated by a smart contract, and each bmGRAM is backed by GRAM tokens. However, subject to DEX liquidity and overall market dynamics, a Market price depeg is possible. That creates an arbitrage opportunity, as there is always an option to unstake at the Fundamental price in the bemo application.<br>

**What are the risks associated with using bemo?**\
The main risk is the smart contract vulnerability. bemo takes various measures to minimize it. We undergo independent code audits, including audits by the blockchain’s core dev team.<br>

**How big is the bemo application fee?**\
bemo charges a 20% fee on staking rewards, with 10% going to validators and 10% to bemo for protocol maintenance and future development.

<br>


# Ambassador Program

Ambassador Program bemo

Our Ambassador Program is designed to bring together a diverse community of enthusiasts from around the globe. As an ambassador, you'll play a crucial role in driving the adoption of decentralized finance, expanding the bemo community, and contributing to the growth of the blockchain ecosystem. Join us and be a part of the future of Web3!<br>

### What do bemo Ambassadors do?

They promote bemo via social media platforms including Twitter, Facebook, Instagram, YouTube, LinkedIn, Reddit, and Medium. They help spread the word about bemo's solutions and share its vision for a decentralized future, ensuring bemo's name is recognized and respected within the blockchain community and beyond.

\
[**Application form for becoming an ambassador**](https://forms.gle/usDVA4ydDYHuENde6)

<br>


# Incentive Rewards Program

Introducing the bemo Incentive Rewards Program

{% hint style="warning" %}
stXP pre-token campaign is over, find the recap here: \
[https://bemo.fi/blog/bemos-journey-from-stxp-to-bmo](https://bemo.fi/blog/bemos-journey-from-stxp-to-bmo/)
{% endhint %}

**Enter Staking Experience Points (stXP)**

Your engagement with the **bemo** ecosystem is now more rewarding than ever. Earn stXP through multiple avenues involving stGRAM tokens. Whether you're just staking, holding, or swapping it on DEXs, your actions translate to stXP.&#x20;

**Community Milestones for stXP Conversion**

The accumulation of stXP is driven by two predetermined community milestones:

* **Milestone 1**: Completion of a 12-month accumulation period
* **Milestone 2**: Achieving 50 million GRAMs in total value locked in the app

Upon reaching either of these milestones, an automatic conversion process will be initiated, converting your stXP into $BMO tokens.

\
**stXP to $BMO Conversion**

The conversion of stXP to $BMO tokens follows a pro-rata allocation system tied to specific thresholds of TVL within the bemo.&#x20;

As TVL reaches predefined levels, the incentive pool of guaranteed $BMO tokenomics allocation for stXP holders will expand accordingly:

* **10% $BMO Allocation:** Triggered when bemo TVL reaches 10 million GRAMs.
* **15% $BMO Allocation:** TVL of 30 million GRAMs.
* **20% $BMO Allocation:** TVL of 50 million GRAMs.

**Track Your Rewards**

Keep tabs on your stXP accumulation. Navigate to the [Rewards section](https://app.bemo.finance/rewards) within the bemo app to view your credits, all tied to your unique TON wallet address activity.

{% hint style="success" %}
**Top Tip**: Every action you take with stTON has an impact. Whether you Stake, Hold, Swap or become a DEX Liquidity Provider, you can track all your activities on your stXP page within the app.
{% endhint %}

<br>


# stXP

Staking Experience Point Token

{% hint style="warning" %}
stXP pre-token campaign is over, find the recap here: \
[https://bemo.fi/blog/bemos-journey-from-stxp-to-bmo](https://bemo.fi/blog/bemos-journey-from-stxp-to-bmo/)
{% endhint %}

**stXP** is the Staking Experience Point Token that rewards every bemo user for staking their GRAM tokens. It is a preToken that will be converted into $**BMO**.

We plan to allocate up to 20% of the total BMO tokens to those holding stXP. The greater your stXP, the more BMO tokens you will receive.

You can always check your stXP balance on the reward page of the [**bemo app**.](https://app.bemo.finance/rewards)<br>

### Earning stXP

Consider stXP tokens to be virtual tokens within the stGRAM ecosystem. Every stXP earned contributes to the future BMO airdrop. Accumulating stXP is straightforward: stake, hold, provide liquidity, or swap your stGRAM. The more active you are, the more rewards you get.

#### Mint stTON

Deposit GRAM into bemo to mint stGRAM. We will give you 1 stXP for each stGRAM. For example, if you mint 500 stGRAM tokens with bemo, you will get 500 stXP.

{% hint style="info" %}
This doesn’t include purchasing stGRAM on DEXs or receiving from other users.
{% endhint %}

#### Holding stTON

The most straightforward method to earn stXP is stGRAM holdings. When you have stGRAM in your wallet, your stXP balance will gradually increase.

{% hint style="success" %}
All actions that increase your stGRAM holdings—minting, purchasing, or receiving—are recognized as stXP accumulation. Conversely, selling or transferring stGRAM ceases their stXP production.
{% endhint %}

**stXP Holding Multipliers**

stXP accumulation can be accelerated by multipliers, which are activated based on:

* The amount of stGRAM in your wallet: 1000 stGRAM or more.
* The duration of stGRAM holding: 3 months or more.

These multipliers are additive and could increase the stXP accrual rate by up to x2.

#### Swapping stGRAM on DEXs

When you swap stGRAM for TON on DEXs, you’ll earn stXP. The more you trade, the more stXP you collect.

{% hint style="info" %}
Supported DEXs: DeDust, Ston.fi, Megaton.
{% endhint %}

#### Provide Liquidity with stGRAM

We reward you with stXP when you provide liquidity in the stGRAM/GRAM pair. By providing liquidity, you earn stXP for both stGRAM holding and liquidity in the pool, which is equivalent to a multiplier of 1.5.

{% hint style="info" %}
Supported DEXs for Liquidity: DeDust, Ston.fi, Megaton.
{% endhint %}

### Maximize Your stXP

There is no limitation to the choice of strategy. You are free to utilize any combination of methods to earn stXP and discover the approach that best aligns with your preferences and goals. \
Read the [**stXP earning guide**](https://bemo-finance.medium.com/ultimate-stxp-farming-guide-5b04f9f30d39) for more information.

<br>


# stXP FAQ

Frequently Asked Questions

{% hint style="warning" %}
stXP pre-token campaign is over, find the recap here: \
[https://bemo.fi/blog/bemos-journey-from-stxp-to-bmo](https://bemo.fi/blog/bemos-journey-from-stxp-to-bmo/)
{% endhint %}

#### What is $stXP token for?

$stXP is the bemo platform’s preToken, which you will be able to convert to our governance token $BMO. Currently, $stXP is the only way to invest in the bemo platform.

#### How many BMO tokens can you receive?

Subject to TVL milestones, we will distribute up to 20% of the total amount of $BMO tokens among those who have $stXP. The more $stXP you have, the more $BMO tokens you'll receive.

#### Does it have a monetary value?

Yes, you can sell $stXP for $stGRAM or buy it to increase your $BMO share. $stXP tokens are available for trade on [TON DEX DeDust](https://app.dedust.io/swap/stXP/stTON).&#x20;

#### How to earn $stXP?

Start staking $GRAM with bemo. You will earn $stXP for every action with $stGRAM: minting, holding, providing liquidity, and swapping. Read [the stXP Earnings section](/tokenomics/stxp#earning-stxp).&#x20;

#### Minting vs. Holding: Which offers more advantages?

Stake GRAM with bemo app rewards you with stXP instantaneously. But holding stGRAM makes stXP grow over time, which could lead to greater rewards in the long run.

#### Should I unstake my stGRAM or sell them?

Selling your $stGRAM on a DEX tends to be more advantageous. This way, you convert your $stGRAM to $GRAM immediately, avoiding the up to 72-hour cooldown period associated with unstaking in the app and simultaneously increasing the $stXP reward.

#### Is it more profitable to hold or provide liquidity?

The answer depends on your $stGRAM amount. Large holders may find greater $stXP yields by just holding because of the multipliers. If you are holding under 250k $GRAM you would benefit more from the DEX liquidity provision.

<br>


# BMO Token

**Community Involvement**

**BMO** is designed to support decentralization and encourage community participation in the project’s development. We believe that long-term progress in the crypto industry depends on an active and engaged community.

Over time, **BMO** tokens are expected to play a greater role in shaping the project’s direction, enabling token holders to contribute to key decisions.

**Potential Incentives and Benefits**

* **Discount Mechanism:** A portion of protocol rewards may be redistributed to GRAM stakers who also stake BMO, allowing them to benefit from reduced platform fees.
* **Liquidity Provider Incentives:** BMO liquidity providers in BMO/stGRAM pools on the bemo platform may receive a share of protocol rewards in GRAM.

**Ongoing Research**

We are exploring additional native features for bemo, where BMO could serve as a core element of the platform’s ecosystem.<br>

{% hint style="info" %}
Full Tokenomics and details on the token design, issuance, and distribution will be transparently communicated later.
{% endhint %}

<br>


# Disclaimer

By using the bemo interface, you affirm and agree to the following:

1. Non-U.S. Jurisdiction: You are not a U.S. person, nor are you located, ordinarily resident in, or have business affiliations with the United States of America.
2. Legal Jurisdiction: You are not an individual or entity in jurisdictions where it is unauthorized, prohibited, or illegal to acquire, offer, or sell our token products.
3. Non-Sanctioned Activity: You do not directly or indirectly own, control, or have received any assets from any blockchain address listed on a sanctions list or equivalent maintained by any major jurisdictions.
4. Non-Illegal Transactions: You do not intend to transact with any Restricted Territories or Sanctions List Persons.
5. Informational Purposes: The provided content is purely informative and does not constitute legal, tax, investment, financial, or other advice. Do not base decisions solely on this content or other information we provide. Seek independent professional advice from a qualified licensed individual before making any decisions.
6. Network Upgrades: Certain operations, like GRAM withdrawals on the TON blockchain, may be temporarily disabled due to network upgrades.
7. Technical Knowledge: You have the technical knowledge to understand and evaluate the risks of using the bemo application.
8. Compliance: Your use of the Interface adheres to all relevant laws, rules, and regulations and does not violate or facilitate the violation of any applicable laws or regulations, nor contribute to or facilitate any illegal activity.
9. Security: You acknowledge and understand that the bemo protocol could potentially contain vulnerabilities or bugs within its smart contracts or experience system failures. These circumstances may lead to substantial security risks. By using the bemo application, you willingly accept these potential risks and the possibility of technical issues, proceeding to utilize the application at your own risk.
10. Liability: You understand and accept that no one on the bemo team is responsible for the risks or potential losses that may arise from using the protocol.


# Terms of Use

**Last updated:** May 24, 2024

## INTRODUCTION

Bemo labs (“bemo,” “us” or “we”) welcomes you (“you” or “User”) to use our website <https://bemo.finance/> (“Service” or Platform”). These Terms of Use (“Terms”) describe the terms and conditions that govern your use of or access to our Service. The Terms constitute an agreement between you and us, so please read these Terms carefully.

bemo is a non-custodial liquid staking protocol built on The Open Network (TON) blockchain. These Terms govern your access to and use of the bemo application and associated services. By accessing or using the Service, you agree to be bound by these Terms, our Privacy Policy (<https://docs.bemo.finance/legal/privacy-policy>), and the other rules provided with the Service, whether or not you are a registered user of our Service. If you do not accept or understand the Terms, please do not use or access the Service.

### Changes to the Terms

We reserve the right at any time to: modify, update, or change the terms and conditions of the Terms or our Privacy Policy; modify, update, or change the Platform, including eliminating or discontinuing any content or feature of the Platform; or impose fees, charges or other conditions for use of the Platform or parts thereof. Please check back periodically for the latest version of the Terms. Your use of the Service following any changes to these Terms constitutes your acceptance of any such changes.

Securities Disclaimer

No information which may be made available on the Platform shall constitute or be construed as a recommendation, endorsement, offer, invitation, or solicitation to enter into any transaction with or purchase any product, or otherwise deal with securities, crypto assets, or other products. You further understand that none of the information providers are advising you personally concerning the nature, potential, value, or suitability of any particular security or crypto asset, portfolio of securities or crypto assets, transaction, investment strategy, or other matter, and any information provided is not tailored to the investment needs of any specific person. You understand that an investment in any security, or crypto asset or derivative product is subject to several risks and that discussions of any security or crypto asset published on the Platform may not contain a list or description of relevant risk factors. Please note that markets change continuously, so any information, content, or other material provided on or through the Platform may not be complete or current, or may be superseded by more current information. You rely on such information at your own risk.

**No Professional or Investment Advice**

The Platform is not intended to provide tax, legal, insurance, or investment advice, and nothing on the Platform should be construed as an offer to sell, a solicitation of an offer to buy, or a recommendation for any security or crypto asset by us. You are solely responsible for determining whether any investment, security, or strategy, or any other product or service, is appropriate or suitable for you based on your investment objectives and personal and financial situation. You should consult an attorney or tax professional regarding your specific legal or tax situation.

## Definitions

“Digital Assets” means cryptocurrencies, tokens, digital currencies, digital assets, blockchain assets, or any related terms, which are used in transactions on our Platform.

“TON” means The Open Network (TON) blockchain and its native cryptocurrency, TON tokens.

“stTON” means a liquid token minted by the bemo application representing a user’s share in the total TON pool deposited into bemo. The value of stTON appreciates based on staking rewards.

“Staking” means the process of depositing TON tokens into the bemo protocol to earn staking rewards.

“Unstaking” means the process of withdrawing TON tokens from the bemo protocol, which involves a cooldown period of 36 to 72 hours.

“Validator” means a node on the TON blockchain that participates in validating transactions and blocks, receiving rewards for their services.

## YOUR USE OF THE SERVICE

bemo is a decentralized liquid staking application built on the TON blockchain. It enables users to stake their TON tokens, earn staking rewards, and receive stTON tokens that can be traded or used in various DeFi applications. This protocol operates through open-source, self-executing smart contracts that are deployed across various permissionless public blockchains. We have no control over the results of operation on such contracts.

USER’S ACCESS

You understand and agree that the information and services provided by the Platform are not provided to, and may not be used by or for the benefit of, any individual or entity in any jurisdiction where the provision or use thereof would be contrary to any applicable law, or where we are not authorized to provide such Platform or information and services. We also do not offer services or products to Users in a few excluded jurisdictions including the United States, North Korea, Cuba, Iran, Syria, or any other jurisdictions in which we may determine from time to time to terminate the services at our sole discretion (“Excluded Jurisdictions”). You should inform us immediately if you become a resident in any of the Excluded Jurisdictions or are aware of any Users based in any of the Excluded Jurisdictions. We also do not offer services to persons or entities in the U.S. Treasury Department’s List of Specially Designated Nationals or Blocked Persons, the EU’s Consolidated Financial Sanctions List or the UK Sanctions List, or any entity that is owned or controlled by a person or entity on such lists (“Prohibited Parties”), or offer services that involve or otherwise benefit Prohibited Parties. You understand that we reserve the right to take any appropriate actions in compliance with this restriction or in compliance with the law of a relevant jurisdiction.

### Your Wallet and Your Information

To use bemo, you must connect your cryptocurrency wallet (e.g., Tonkeeper) to the application. This wallet will be used to interact with bemo’s smart contracts. Wallets are not operated by, maintained by, or affiliated with bemo, and we do not have custody or control over the contents of your wallet and cannot retrieve or transfer its contents. Users are encouraged to maintain the privacy and security of their digital wallets and associated private keys. These credentials are used to connect and interact with the Platform, and users are solely responsible for their safekeeping. The Platform will not have access to or store users’ private wallet information. Users are urged to follow best practices for wallet security, such as enabling multi-factor authentication and maintaining backups of their wallet keys. Users use third-party self-custodial wallets to interact with the Platform, we have no control or guarantee over the wallets. bemo is not and will not be liable for any damages or loss arising out of digital wallet software or your misunderstanding of how the TON blockchain and/or digital wallet works.

Users are responsible for ensuring that they comply with all applicable laws and regulations when using the Platform, including but not limited to those related to the use of digital wallets and blockchain technology.

Users may have the option to disconnect their digital wallets from the Platform at any time. Wallet disconnect will be subject to the terms and conditions set forth by the applicable blockchain and wallet providers.

### Eligibility

You must be at least 18 years old (or the age of majority in your jurisdiction) to access, use, or register with the Platform. bemo does not knowingly collect or maintain information from children under this age.

## PROHIBITED ACTIVITIES

The following restrictions apply to your use of the Service. In connection with your use of the Platform, you must not directly or indirectly:

·      disassemble, decompile, reverse-engineer, or derive the source code of the Service;

·      copy, modify, create derivative works of, publicly display, publicly perform, republish, download, store, or transmit any of the material on our platform;

·      interfere with or disrupt the Service;

·      attempt to gain unauthorized access to bemo’s systems and smart contracts;

·      have transactions with or benefit individuals, entities, or countries that are subject to international sanctions, including those listed on any sanctions list maintained by major jurisdictions;

·      transmit viruses, malware, or other malicious software;

·      attempt to gain unauthorized access to the Service;

·      try to get access to other users’ wallets or information;

·      access or use the Service in violation of any applicable local or international laws;

·      use the Platform in any way other than for its intended purpose;

·      use the Platform at any time when any representation you have made under these Terms is untrue or inaccurate;

·      rely on the Platform for advice related to financial or legal decisions or transactions;

·      implement any device, scheme, or artifice to defraud or materially mislead any person;

·      engage in any activity that operates as fraud or deceit upon any person;

·      fail to comply with any applicable provision of these Terms or any other terms, conditions, privacy policies, or other policies governing the use of the Platform;

·      attempt or assist in any hack or attack on the Platform or any associated wallet application or device;

·      violate any applicable laws, rules, or regulations in your relevant jurisdiction;

·      transact in securities, commodities futures, trading of commodities on a leveraged, margined, or financed basis, binary options (including prediction-market transactions), real estate or real estate leases, equipment leases, debt financings, equity financings or other similar transactions, if such transactions do not comply with all laws, rules, and regulations applicable to the parties and assets engaged therein;

·      engage in token-based or other financings of a business, enterprise, venture, DAO, software development project, or other initiative, including ICOs, DAICOs, IEOs, or other token-based fundraising events;

·      engage in any act, practice, or course of business that circumvents any sanctions or export controls targeting you or the country or territory where you are located;

·      infringe on or violate any copyright, trademark, service mark, patent, right of publicity, right of privacy, or other proprietary or intellectual property rights under any law;

·      disguise or interfere in any way with the IP address of a computer used to access the platform, or prevent the accurate identification of the IP address of such computer;

·      transmit, exchange, or participate in any activity supported by the direct or indirect proceeds of criminal or fraudulent activity;

·      contribute to or facilitate any of the activities listed above.

We reserve the right to terminate your use of the Platform for violating any of the prohibited activities.

### FEES

bemo charges a 20% fee on staking rewards (10% to validators, 10% to bemo for maintenance and development). The fee is calculated and deducted automatically by the smart contract after each validation round.

When using the bemo application, you may incur additional network and unstaking fees.

All transactions on the TON blockchain, including staking, unstaking, and transfers, are subject to network fees (also known as gas fees) which are determined by the blockchain network. There may be fees associated with unstaking your TON tokens, which will be calculated based on the network conditions at the time of the transaction.

## STAKING AND REWARDS

We are offering rewards for participation in Staking for both participants and validators. Also, we may from time to time offer additional rewards that we announce on the Platform. You can review the tokenomics of our bemo Incentive Rewards Program here: <https://docs.bemo.finance/tokenomics/incentive-rewards-program>. Unless the rewards are embedded in the smart contract, we are allowed to make changes in the rewards structure, and introduce new or abolish older rewards, which we will announce on the Platform.

## AMBASSADOR PROGRAM

We offer an ambassador program for eligible applicants. We reserve the right to accept or reject anyone for any reason to our Ambassador Program. The description of the Ambassador Program is available here: <https://docs.bemo.finance/get-started/ambassador-program>.

## INTELLECTUAL PROPERTY

## Ownership

All rights, title, and interest in and to the Platform, including our website, any content thereon, the technology and software used to provide it, and any trademarks, logos, or brand elements contained therein, are the exclusive property of bemo and its licensors. Your use of the Platform and its contents does not grant or convey any rights, title, or interest in these properties to you, except for the limited rights expressly granted in these Terms.

## Limited License

Subject to your compliance with these Terms, we grant you a limited, non-exclusive, non-sublicensable, non-transferable, and revocable license to access and use the Platform and its contents for your personal, non-commercial use. Any other use of the Platform is expressly prohibited. All rights not expressly granted herein are reserved by bemo and its licensors.

## UPDATES TO THE SERVICE&#x20;

We may issue updates or upgrades to the Service and disable access to the Service for any period or permanently. The Service is subject to scheduled and unscheduled service interruptions.

You consent to automatic updates or upgrades of the version of the Service that you are using on your device to a new version.

You agree that we will not be liable to you for any interruption of the Service.

## PRIVACY

Our Privacy Policy explains how we collect, use, and protect your personal data.

When you collect or transmit any personal data through the Service, you must follow all laws and obtain all permissions from each data source to transmit such data through the Services. You agree not to:

·      use a username that is the name of another person with the intent of impersonating that person;

·      provide any false personal data to us or create any user account for anyone other than yourself without such person’s permission;

·      engage in unauthorized collection of users’ information or access the Service by automated means, including bots or scrapers; or

·      reveal any personal data related to another user, including address, phone number, email, credit card number, or any information that may otherwise identify another user.​​

## GENERAL TERMS

### Links to Third-Party Websites

The Service may contain links to websites owned by third parties. Such links are provided for informational purposes only. We are not responsible for any third-party websites or their content.

### Limitation of Liability

The use of blockchain technology involves certain risks, including but not limited to smart contract vulnerabilities, hacking, and network failures. The Service is provided to you “as is.” We make no warranty of completeness, accuracy, availability, timeliness, security, or reliability of the Service or any content in the Service. We will not be liable for any damages, including loss of profits, loss of data, or other losses resulting from:

·      any interruption of the Service;

·      any content of any third party on the Service, including any defamatory, offensive, or illegal conduct of other users or third parties;

·      any content obtained from the Service; or

·      unauthorized access, use, or alteration of any material or content.

### Indemnity

You agree to defend, indemnify, and hold us harmless from any claim, losses, obligations, damages, or expenses arising from your use of or access to the Service, your breach of these Terms, or your violation of any law or the rights of a third party. This term will continue to be effective even if you have stopped using the Service.

### Governing Law and Resolution of Disputes

All claims relating to these Terms or the Service will be governed by the law of the British Virgin Islands, excluding its conflict-of-laws rules.

Any dispute, controversy, or claim arising out of or relating to these Terms, including their validity, breach, or termination, which cannot be settled amicably or in small claims court, shall be resolved exclusively in the courts of the British Virgin Islands. By using the Platform, you consent to the jurisdiction of these courts.

You agree that any cause of action arising out of or related to the Service must commence within 1 year after the cause of action accrues. Otherwise, such cause of action is permanently barred.

### TERMINATION

You may stop using the Service at any time, provided that it will take time to Ustake your Digital Assets.

bemo reserves the right to modify, suspend, or discontinue the operation of, or access to, the platform or any portion of the platform at any time and for any reason, with or without notice. At our sole discretion, we may also impose limits on certain features and services or restrict your access to parts or all of the platform without notice or liability.

In case of termination, discontinuation, or cancellation of the Platform or any service, all provisions of these Terms which by their nature should survive will remain in effect, including, without limitation, ownership provisions, warranty disclaimers, indemnity, and limitations of liability. We will not be liable to you or any third party for any termination or cessation of access to the platform.

If you breach any term of this agreement, or we suspect that you have not complied with these terms, we may at our discretion terminate your access to the platform immediately, without prior notice to you, and without any liability to you. Upon termination for any reason, you must cease all use of the Platform.

### CONTACT INFORMATION

If you have any questions about these Terms, you can contact us at <info@bemo.finance>.


# Privacy policy

**Last updated:** June 13, 2023

### Introduction

bemo respects your privacy and adheres to data protection and privacy laws. This Privacy Policy outlines how we collect and use your personal data while you use our platform. It applies when bemo acts as a data controller or whenever this Policy is referred to.

Additional privacy details related to specific products or services may supplement this Policy. In case of any difference, those specific details take precedence.

Our platform might be integrated with third-party services with their own privacy policies. In these cases, we ensure they provide the necessary transparency, possibly linking to this Policy.

If you disagree with this Policy, please refrain from using our platform or providing us with your personal data. Your use of our platform signifies your acceptance of this Policy and the terms therein.

This Policy is subject to changes. We recommend regularly reviewing it to stay informed of any updates. Continued use of the platform post any changes implies your acceptance of the revised Policy.

### What Data We Collect

At bemo, we uphold your privacy by limiting data collection. Here's a brief overview of the types of information we may collect:

1. Public Blockchain Data: When you link your blockchain wallet to our services, we collect your publicly available blockchain address. This helps us monitor usage and screen for illicit activity.
2. Tracking Technologies: With help from third-party providers, we collect data from use technologies like localStorage, mobile device IDs, cookies, and web beacons. This aids us in personalizing and enhancing your experience on bemo.
3. External Information: To ensure legal compliance and safeguard against fraud, we may receive additional information about your wallet or transactions from our service providers.
4. Survey Data: If you participate in a survey, we'll record the information you provide, including your responses and interactions with our services.
5. Communication Records: We retain the details from any communications you send through email, customer support, or social media, as well as your inputs in surveys or questionnaires.

We strive to maintain transparency about our data practices, adhering to both our company values and data protection laws.<br>

### How We Use the Information

The information we collect is used primarily to provide, maintain, and improve our services. Here's a detailed overview of how we use your data:

1. Service Operations: We use the data collected primarily to ensure our platform functions effectively and to provide you with an optimal user experience. This involves using data for maintenance, troubleshooting, and improving platform features.
2. Security Measures: Your data aids us in maintaining the security and integrity of our platform. This includes detecting and preventing any fraudulent activities and ensuring compliance with our terms of use.
3. User Engagement: We analyze your data to gain insights into your preferences and behavior on our platform. This allows us to personalize your experience, making it more engaging and convenient.
4. Legal Compliance: We may use your data to comply with applicable laws, legal requests, and our internal policies.
5. Customer Support: We use your information to respond to customer inquiries, handle issues, and enhance our customer service process.

Your privacy remains paramount throughout all our operations, and we commit to using your data responsibly and transparently.

### Cookies and Other Tracking Technologies

bemo uses cookies and other tracking technologies to collect data that help us understand how our platform is being used and improve the overall user experience. Here's how we use these technologies:

* Cookies: Cookies are small data files stored on your device when you visit our platform. They help us to remember you and your preferences, enabling us to provide a personalized user experience. Cookies also allow us to collect data such as the number of visitors, the pages they visit, and the duration of their stay on our platform.
* Web Beacons: Web beacons, also known as pixel tags, are tiny, transparent images embedded in web pages and emails. They allow us to track the number of users who have visited certain pages or opened our emails, thus helping us to measure the effectiveness of our communications and marketing campaigns.
* LocalStorage: LocalStorage is a web storage technology that allows websites to store data in a user's web browser. We use LocalStorage to remember your preferences and settings, thereby improving your user experience on our platform.

Please note that if you choose to disable cookies or other tracking technologies, some features of our platform may not function properly or may be unavailable.<br>

### Cookies and How We Use Them

We use cookies on our website to enhance your browsing experience. Cookies are small files stored on your computer by the websites you visit. They help us remember your preferences and improve our services. Here's how we use cookies:

* Essential Cookies: These cookies are necessary for the website to function properly. They remember your language and country preferences, preserve authentication, and store information during payment processes.
* Website Improvement: We analyze cookies to understand how you use our website and make improvements. This includes redirecting you to relevant content based on your interests and providing a better user experience.
* Personalization: We use cookies to personalize the content you see. By tracking referral sources, like email campaigns or links, we can gauge the effectiveness of our promotions and tailor recommendations to your preferences.

You can manage cookies through your browser settings, but disabling them may affect certain features of our website. By continuing to use our website, you consent to the use of cookies.

### Third-Party Links and Sites

Our platform may include links to external websites or services not operated or controlled by us. We cannot guarantee the privacy practices employed by these third-party sites, so if you click on a third-party link, you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every site you visit.

bemo does not have any control over and assumes no responsibility for the content, privacy policies, or practices of any third-party sites or services. We include these links solely for your convenience, and their inclusion does not imply endorsement by bemo.

### Data Retention

​​At bemo, we retain your personal information only for as long as necessary to fulfill the purposes for which we collected it. This includes providing our services, complying with legal and regulatory obligations, resolving disputes, and enforcing our policies.

The length of time we retain personal data varies depending on the purposes for its use and as required or permitted by law. Once the retention period expires, personal data will be deleted. Therefore, the right to access, the right to erasure, the right to rectification, and the right to data portability cannot be enforced after the expiration of the retention period.

Please note that we may also anonymize your personal data (so that it can no longer be associated with you) for research or statistical purposes, in which case we may use this information indefinitely without further notice to you.

### Your Rights and Choices

You have certain rights regarding your personal data and the choices you can make. These include:

1. Right to Access and Update: You have the right to know what personal data we hold about you and to access that information. You can also request updates or corrections to any incomplete, incorrect, unnecessary, or outdated data.
2. Right to Erasure and Data Portability: You have the right to request the deletion of your personal data, subject to certain legal obligations. Additionally, you can obtain a copy of your data in a machine-readable format.
3. Right to Object and Restrict Processing: In certain circumstances, you have the right to object to or restrict the processing of your personal data. This includes situations where you believe the data is inaccurate or the processing is unlawful.
4. Account Deletion: You can delete your bemo account, which will remove personal data stored on bemo servers as per bemo's Terms & Conditions. However, please note that information stored on blockchain and public ledgers cannot be deleted. It is important to ensure continued access to your wallet by saving your mnemonics to access your wallet from another source.
5. Marketing Preferences: You have the right to unsubscribe from direct marketing messages and request that we stop processing your personal data for direct marketing purposes. However, critical alerts may still be sent to you.

It is important to consider that the rights and obligations assigned to your account or cryptographic address on the Blockchain are irrevocable and cannot be deleted.

**Who is the controller of your Personal Data?**

Your personal data is managed by bemo labs LTD, a British Virgin Islands (BVI) Company, which serves as the primary controller.

Additionally, an affiliate of bemo labs that provides a specific product or service may also act as a controller of your personal data. The identity and contact details of this controller can be determined by examining the terms and conditions of the respective product or service or through the contact information provided on the relevant Bemo platform websites.

For inquiries concerning bemo's privacy practices, you can reach us at <info@bemo.finance>.<br>

### Changes to this Policy

We may update or modify this Privacy Policy from time to time to reflect changes in our practices or legal requirements. We will notify you of any significant updates by posting a prominent notice on the Project or through other communication channels. We encourage you to review this Privacy Policy periodically to stay informed about how we collect, use, and protect your personal information.

Your continued use of the bemo platform after the effective date of the updated Privacy Policy constitutes your acceptance of the revised terms. If you do not agree to the updated Privacy Policy, please refrain from using the Project and contact us if you would like to deactivate your account or have your personal information removed.<br>

### Contact Us

If you have any questions, concerns, or inquiries regarding this Privacy Policy or how we collect, use, or share your information, please contact us at <info@bemo.finance>. We value your feedback and will strive to address any issues or inquiries in a timely and appropriate manner.

Thank you for your trust in our project, and we appreciate your interest in understanding our privacy practices.

<br>


# Support

If you're experiencing difficulties using the **bemo** application, try the following:

* Refresh the page&#x20;
* Clear your browser's cache & cookies&#x20;
* Restart your device&#x20;
* Reconnect your wallet

**Still Need Help?**

If your issue persists even after performing these actions, please email us at <info@bemo.finance>.


