# How to run ToEarnFun App

## Getting started

Although ToEarnFun is developed using flutter, currently we only implement Bluetooth connection adaptation for Android models. So we only released the `APK` installation file for Android, you need an Android phone to install it.

## Build and install App

### Install from APK

Download this [1.0.0-alpha](https://github.com/polketio/toearnfun_flutter_app/releases/tag/1.0.0-alpha) and install it on your **Android Mobile Phone**.

### Install from source code

Clone the latest source code from github.

```bash
git clone https://github.com/polketio/toearnfun_flutter_app.git
```

### Run App on local node(Option)

1. [Start the local node.](/toearnfun/build/how-to-run-a-polket-node.md#single-node-development-chain)
2. Modify the following code segment of the **toearnfun\_flutter\_app** project.
3. To configure the necessary data for the local node, [refer to here](#configure-the-local-node-environment-option).

```javascript
  //file: toearnfun_flutter_app/lib/plugin.dart
  
  ......
  
  @override
  List<NetworkParams> get nodeList {
    return [
      {
        'name': 'Polket Testnet',
        'ss58': 42,
        'endpoint': 'ws://10.0.2.2:9944', // change the `endpoint` to the url of the local node  
      },
    ].map((e) => NetworkParams.fromJson(e)).toList();
  }
  
  ......
```

{% hint style="info" %}
The special address **10.0.2.2:9944** on Android is the right endpoint of local node, [see more about it](https://developer.android.com/studio/run/emulator-networking).
{% endhint %}

Open **Android Studio**, and **open Android Emulator** or connect **Android Mobile Phone**.

```bash
# Run ToEarnFun App on Polket testnet
flutter run lib/main_dev.dart
```

#### Build APK

```bash
flutter build apk --split-per-abi
```

#### Install APK

```bash
flutter install
```

## How to test

### Configure the local node environment(Option)

{% hint style="info" %}
If we run the network using a local node, we first need to initially configure some data.
{% endhint %}

Open the [Polkadot Explorer](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer) in a browser and connect to the local node.&#x20;

In `currencies` module `create` an asset `FUN` for training incentives.&#x20;

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

In events, we see that the `AssetId` starts at 1.

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

In `vfe` module `createVfeBrand`, fill in the content as shown below.

The same as `Assets`, the `BrandId`starts at 1.

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

We use `sudo key` to set `AssetId 1` as the incentive token.

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

Although we haven't registered a producer yet, the `BrandId 1` owner can pre-approve `ProducerId 1` to mint 10000 items of `VFE`.

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

In the App, we will use a demo account `5C4vzxJwrWbds1wdV5YmMEyeifXhJbFVPQSfzbr371aTLsLp` for testing.

So we transfer a little test coins to it for transaction fees.

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

### Import demo account

1. Click `Import wallet` button.
2. We have filled in a demo `mnemonic` for testing by default. Just click `Continue` button.
3. Setup the wallet `name` and `password`.

<img src="/files/7iltT3gN0meu4biMij2y" alt="" data-size="original">

![](/files/sPGvJunuvsCC9BMOcyMj)

![](/files/H0ABJUN0y3R5qvqGkx0T)

### Register and bind device

After the account is created, we will enter the `Home` page. Then click the `Image` button, select the `Simulated Jump Rope`  item to bind device.

> In fact, we have already produced a real smart jump rope that can be connected. Due to time constraints, we first provide a simulator for testing.

![](/files/DYHV9BQ8SonA6VDwlD10)![](/files/JPvJ1YJV9ZPiiny80c4a)

Follow the steps and select the `Simulated` device to connect.

![](/files/RSiPlREW589eeYUq3oZZ)![](/files/ddfTi5FqBI9lEFjzzrkn)

1. Click `Register` button, if current account isn't producer, the program first registers the account as a `producer`. Then click `Register` button again to register this device on chain.
2. Click `Bind` button to activate this device on chain.
3. After the binding is successful, you will return `Home` page and get a new `Virtual Fitness Equipment` (VFE).
4. Click `STATUS` label, `disconnected` will change to `connected` .

![](/files/TOKlyEDBzQGTRCf8clMD)![](/files/OqRfuNrGO4AIal3rFoar)

### Generate simulated training report

Since there is no real equipment, we produce simulated training reports.

1. In `Home` page Click `My Training` label, enter `Training Report` page.
2. Click `AppBar right button`, the app will generate a simulated training report. Select this report, and click `>` image button, enter detail page.

![](/files/4vkNiF0C7NCbOOq6bGIU)![](/files/5EQPCTri6lFW27gILj25)

### Upload training reports and earn FUN rewards

1. New training reports are available within a 1-day deadline. Click `Report Now` button to upload training report on chain.
2. After the runtime verification training report is valid, `FUN` rewards will be issued to users. Based on the reported training volume, the user's daily available energy will be consumed.

![](/files/3Qs6sjp8Gk4TZVjAhe1E)![](/files/3RpLUbJ5pRMuhBibZ5dO)

#### View user daily training and VFE details

1. In `Home` page, we can see the user's daily training chart. The user's daily energy will be restored by 25% each period. The user's daily earning cap resets every 24 hours.
2. Click `VFE` image, we can enter `VFE Detail` page, see more information about `VFE`.

**Sport Type**

The system will support 3 sports types: `JumpRope`, `Running`, `Riding`. Currently under development is `JumpRope`.

**VFE Rarity**

VFE currently has 4 rarities, and the attribute values of different rarities are different.

* Common.
* Elite.
* Rare.
* Epic.

**Initial attribute points**

The ability of `VFE` consists of four attributes: `Efficiency`, `Skill`, `Luck`, and `Durability`, and the range of initial points varies according to the rarity.

| Quality | Min. Attribute | Max. Attribute |
| ------- | -------------- | -------------- |
| Common  | 2              | 8              |
| Elite   | 6              | 12             |
| Rare    | 10             | 18             |
| Epic    | 20             | 30             |

![](/files/9QSSqkTKcmOxVUpKAF11)![](/files/DIgzouIAsIbqjNK6mTuL)

### Battery charge

After each successful `upload training report`, not only the user's energy is consumed, but also the battery of the VFE is consumed.

1. In the `VFE Detail` page, click the `Charge` button at the bottom.
2. In the `dialog view`, you can slide the `slider bar`, select the amount you want to charge, and finally click the `confirm` button to pay `FUN` as the charging cost.

![](/files/opGxrW5HAkXY6fRmSpGQ)![](/files/VwM3yRkaYdxEBvc7UD6m)

### Level up

To get more `FUN`, in addition to training every day, you can also level up `VFE` to improve each training to get more `FUN`.

1. In the `VFE Detail` page, click the `Level up` button at the bottom.
2. In the `dialog view`, you can level up `VFE` by paying enough `FUN`.

![](/files/2DtpwRQ6cBDSn8a4Hg9c)![](/files/VThpxtBGdmNCfSII5cRn)

### Increase VFE ability

New points can be added after `VFE` completes the level up.

1. In the `VFE Detail` page, click the `+ Point` button at the `Attributes`.
2. In the `Add Points` page You can freely add the available points to each attribute.

![](/files/2T6NJULLkXkbgGTNJBz3)![](/files/C2wUwgotvQseb2uWKXSF)

### Transfer VFE

When you fully charge the VFE and unbind the device, you can transfer money to other users.

1. In the `VFE Detail` page, first you should unbind the `VFE`, click the `Unbind` button at the bottom.
2. After the VFE is unbound, you can click the `Transfer` button at the bottom.
3. In the `Send VFE` page, If we want to transfer `VFE` to Alice, just copy Alice's address *`5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY`* to the `TextField.`(In the `Android Emulator`, long press `TextField`, then `Paste` the address into it.)
4. Finally, after you check that the address is correct, click `Send` button to complete the transfer.

![](/files/3vbGl4q7L5iKYwXLnULH)![](/files/1VrEmDO0jEIXeo0289i9)

![](/files/ppeRguE86QUOiZcN1WAv)![](/files/SkxXAxicSUetZbWqwHgz)

In the [explorer](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer), you will find the `Transfer` event appears. Next, you will use Alice to place an order on the marketplace.

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

### Marketplace

`ToEarnFun` provides an on-chain `VFE` marketplace. First, we use `Alice` to submit an order in the explorer, then we also submit an order in the App, and finally purchase Alice's order in the App.

#### Make order in Polkadot Explorer

Open the [Polkadot Explorer](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer) in a browser, go to `Developer->Extrinsics`. In `vfeOrder` module `submitOrder(assetId, price, deadline, items)`, fill in the content as shown below. We completed submitting an order with `Alice`.

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

#### Take order in App

1. In App, the bottom toolbar's last tab is `marketplace`. Alice's order appears here.
2. You can buy it now by clicking the `Buy` button on the order item. You can also click on the order to view the `VFE` details.

![](/files/7rJ3fgssy6sMf2eNN3QG)![](/files/86lDQy9v6YQsFlALxzIv)

#### Make order in App

After the `VFE` is unbinded, you can sell it to `VFE` marketplace.

1. In the `VFE Detail` page, if the `VFE` is unbond, you can click the `Sell` button at the bottom.
2. Place a price, click `Maker Order`, and you can sell it to the marketplace.

![](/files/mn4suXx2KxfTAut9bCt5)![](/files/UNYs4KSa6pp7wTsi03BZ)

#### Cancel Order

1. You can click `My Sale` to view your orders on the marketplace.
2. You can click the `cancel` button to delete the unblied order.

![](/files/niQBSOA8JHDj93aFBvni)

### User wallet

In `Home` page or `VFE Detail` page, Click `Appbar right button`, can enter `Wallet` page. We can see all assets of user on `Polket` chain.

> The Polket chain is developed based on substrate, and these assets can be circulated to the polkadot ecosystem in the future.

![](/files/ZlBU11l1MKKZDojcTTQr)

### Buyback plan

`FUN` is not only used in VFE's gameplay, but also can be used to get other assets in the buyback plan.

#### Create buyback plan

Open the [Polkadot Explorer](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer) in a browser, go to `Developer->Extrinsics`. In `buyback` module `createPlan(sellAssetId, buyAssetId, minSell, buybackAmount, sellerLimit, start, period, mode)`, fill in the content as shown below. We use the `Alice` account to create a buyback plan.

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

* **sellAssetId** is the asset used by user will sell to plan. Value 1 is `FUN`.
* **buyAssetId** is the asset used by the creator for buyback `sellAssetId`. Value 0 is `PNT`.
* **minSell** is the limitation of the minimum selling of **sellAssetId**.
* **buybackAmount** is the total number of buyback plan. Please ensure that the account has sufficient balance available.
* **sellerLimit** is used to limit the number of participants.
* **start** is the block number of the buyback plan when starts. When the plan status is `Inprogress`, the user can participate.
* **period** is after how many blocks the buyback plan will end.
* **mode** is sell asset will be handle after buyback plan completed.

#### Buyback plan in App

In the App, you can see the buyback plan just created, click `View` button to view the plan detail.

![](/files/6jJLAIj3SMn4bTe1jbmg)![](/files/cJtDXRaLKQujg9hfU0oT)

#### Participate in the buyback plan

1. On the detailed page, you can lock in `FUN` to the plan, and then wait for the plan to end.&#x20;
2. After the plan completed, the plan will give you a reward for another asset according to the final buyback price.

![](/files/zo3Ota53WzeWBCoth3oH)![](/files/DFK4z1NUTZrV4CGzLFeB)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://polketio.gitbook.io/toearnfun/build/how-to-run-toearnfun-app.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
