# What is Fixes?

Fixes World is a programable token universe on Flow blockchain.&#x20;

It provides multiple fungible token issuance, trading, staking, and governance services. It is driven by the inscription mechanism to enable underlying programmable features:

* **Coins ->** Create/Manage/Trade for all the Fixes coins.
* **Lottery ->** Purchase lottery tickets to get a chance to win platform tokens.
* **Staking ->** Stake specific **𝔉rc20** Token to share platform profits and multiple **𝔉rc20** token vestings.
* **Governance ->** Vote on proposals to participate in governance.
* **𝔉rc20s ->** Deploy/Mint/Transfer/Burn **𝔉rc20** Tokens.
* **Markets ->** Trading **𝔉rc20** Token, you can place a buy or sell order.

## Concepts

<table data-card-size="large" data-column-title-hidden data-view="cards"><thead><tr><th data-card-target data-type="content-ref"></th><th></th></tr></thead><tbody><tr><td><a href="/pages/z6d98OaGSoGobI1nJNZ9">/pages/z6d98OaGSoGobI1nJNZ9</a></td><td>The concept of Fixes inscription</td></tr><tr><td><a href="/pages/yOLlSaDS6hDEJnmLJt6t">/pages/yOLlSaDS6hDEJnmLJt6t</a></td><td>The concept of Fixes Coins</td></tr><tr><td><a href="/pages/BZCpaqcb3VmYJzIzn2pM">/pages/BZCpaqcb3VmYJzIzn2pM</a></td><td>The rules of Fixes Lottery Game</td></tr><tr><td><a href="/pages/3inSMilB2RdKa80k46Xu">/pages/3inSMilB2RdKa80k46Xu</a></td><td>The concept of 𝔉rc20 On-chain Indexer</td></tr></tbody></table>

## Developer

{% content-ref url="/pages/Hcllxi6gInRzmwxDqQ86" %}
[On-chain Interactions](/developer/on-chain-interactions)
{% endcontent-ref %}

{% content-ref url="/pages/OusnyWYpupzN3BR39J50" %}
[Open API Service](/developer/open-api-service)
{% endcontent-ref %}


# Fixes Inscription

Fixes - the inscription contract of the Fixes World

{% hint style="info" %}
The data structure of Fixes inscription is referenced from [Ordinals](https://docs.ordinals.com/inscriptions.html#fields).
{% endhint %}

## What is the core concept of the Fixes Inscription?

Flow is different from other public chains in that its transactions must be executable transaction scripts, which themselves have very strong computational capabilities. Therefore, we choose not to blindly reference the implementation methods of other public chains, but instead try to find the essence of why we need inscription and the inscription protocol from first principles.

For Ordinals, the two key features of their inscription are:&#x20;

* One is to directly store any data in bytecode on the chain
* Another is that the `UTXO` containing the inscription itself has value (holds real `$BTC`)

So we decided to follow these two features when designing the inscription.

* We need to encapsulate arbitrary data in the form of `[UInt8]` and store it on-chain as an inscription resource (Actually, this is the basic functionality of the Flow blockchain.).
* We also want to store a certain amount of `$FLOW` in the inscription resource.

## Why and How to Store $FLOW in the Fixes inscription?

Because we need to make the inscriptions themselves valuable, and for FIXeS, the inscriptions can only be stored in users' accounts. And when you need to extract and use these `$FLOW` reasonably in the corresponding application protocol for FIXeS inscriptions (Like 𝔉rc20 Indexer).

As for how to store, thanks to [Cadence's resource mechanism](https://cadence-lang.org/docs/language/resources). Flow Tokens naturally be composable. Just extract a certain amount of `$FLOW` and store it in the Inscription resource.

## How will these $FLOW be used?

Different application protocols based on the FIXeS protocol, can have completely different usage methods.

> For 𝔉rc20 Indexer

* When each inscription is applied by the 𝔉rc20 Indexer,  `$FLOW` will be extracted to the Token's Treasury Pool (5% will also be extracted to the global pool of the 𝔉rc20 Indexer).
* When the 𝔉rc20 token is burnable, 𝔉rc20 token holders can withdraw a certain amount of `$FLOW` from the Treasury Pool through the `burn` op corresponding to the burned amount.

More details can be found in [𝔉rc20s](/concepts/rc20s).

> For any Fixes Coins

* The $FLOW inside key operation inscription will be extracted when the  operation is performed.  They will be transferred to three targets:&#x20;
  * **40%** to the $flows stakers as staking reward
  * **30%** to the Coins' contract address (If Tradable pool is activatd, It will be deposited into the $FLOW Vault of the Tradable Pool.)
  * **30%** to the platform contact address.

More details can be found in [Fixes Coins](/concepts/fixes-coins)

## Can I use Fixes Inscription for my project?

Of course, the Fixes is a completely open protocol that you can use to build any application based on the Inscriptions.

## Are the contracts open-sourced? <a href="#contracts" id="contracts"></a>

Yes, you can find all contracts here

| Network | Contract Address                                                                       |
| ------- | -------------------------------------------------------------------------------------- |
| Mainnet | [0xd2abb5dbf5e08666](https://contractbrowser.com/account/0xd2abb5dbf5e08666/contracts) |
| Testnet | [0xb7248baa24a95c3f](https://contractbrowser.com/account/0xb7248baa24a95c3f/contracts) |


# Fixes Coins

The standard Fungible Tokens in Fixes World

## Concept

**Coins**, provided a one-stop solution for launching, distributing, and trading Flow Standard Fungible Tokens[\[Example\]](https://github.com/onflow/flow-ft).

It is the best place to launch your meme coin on Flow Blockchain. It not only provides a trading experience similar to [pump.fun](https://pump.fun/), but also provides optional allocation modes for token issuers to use.

**Fair, Safe, Powerful.** That's the core feature that the Fixes Coins always adheres to.

## Features

### Unruggable

All Flow Fungible Tokens launched by the Fixes Coins are deployed on newly created keyless Flow addresses based on the [HybridCustody](https://github.com/onflow/hybrid-custody/) protocol. Therefore, only the Fixes platform contract can manage several methods of these Coins such as initializing the allocation module by using HybridCustody. Since these coins are deployed in keyless Flow addresses controlled only by the Fixes platform contract, once the coin issuers choose to "Renounce" and have the Fixes platform contract removing the coins from its sub-account, they will become truly ownerless "Renounced" Coins.

Note: Due to Flow's Crescendo upgrade, Fixes will temporarily hold on the "Fully Renounce" feature. The network upgrade requires each FT contract upgraded to Cadence 1.0, so the platform temporarily needs to retain the right to update contracts. It will be open after the Crescendo Upgrade.

### Build-in Trading

Once the Tradable module is activated, the coin will immediately mint all the tokens allocated in this module and deposit them in the Tradable Pool with the built-in Bonding Curve.

<figure><img src="/files/m175mh7PdWKFddgbBrW3" alt=""><figcaption><p>Tradable Pool</p></figcaption></figure>

***The Tradable Pool has two trading stages***

1. In-Pool Phase: Because of the Bonding Curve, users can buy and sell coins at any time using the Tradable Pool contract. The price of the Coin is calculated based on the formula of the Bonding Curve.
2. IncrementFi Phase: When the market cap of the Tradable Pool reaches $32k, all liquidity and corresponding proportions of coins will be migrated to IncrementFi. The functions on UI will also automatically adjust to call IncrementFi's liquidity pool's token swap.

***LP Locking(Burning)***

* All LP tokens migrated from Tradable Pool to IncrementFi will be sent to the black hole address of IncrementFi for locking. That means no one can rug from pulling the LP pool.
* When the LP pool is initially created, coins will be added based on the current price of the Bonding Curve. Therefore, some coins may still be reserved in the Tradable Pool (but continuous deposit will occur later, see [below](#profit-sharing-and-deflation) section).

***Built-in Chart***

* Every transaction conducted on the platform will have a transaction record saved on-chain.
* The built-in Chart uses these transaction records for chart presentation.
* In the future, Dexscreener will also be integrated to provide a more comprehensive UI presentation.

***Top Holders***

* In the Tradable Pool, you can see the Top 100 Holders of this coin.
* It is real-time data on-chain, not asynchronous data based on Indexer. The ranking will be automatically updated with each Deposit/Withdrawal.

Note: Only coins that have activated the Tradable module will be included in the global listings on Trending, New, and other exploration pages.

### Profit sharing and Deflation

Transaction fees and inscription costs also be used to automatically re-purchase coins and continuously migrate liquidity for a deflationary boost.

* During the In-Pool phase of trading, the platform will charge a **`0.5%`** transaction fee and also use the Inscription mechanism to clarify the source of **`from`** address.
* Therefore, the potential revenue for each transaction is: **variable** `Transaction Fee` + **fixed** `Inscription Costs`.

The potential income from each transaction will be divided into three parts and deposited into them respectively:

1. `40%` -> The $flows Stakers' Reward Pool (Platform Staking)
2. `30%` -> Platform's contract address (as platform revenue)
3. `30%` -> The coin's contract address (and then will be forwarded to Tradable Pool)

Note: After activating the Tradable Pool, all liquidity($FLOW) deposited to the coin's contract address will be automatically forwarded to the Tradable Pool itself. And the liquidity will have two different functions in two trading stages:

* In-Pool Phase:  it will be automatically added in Market Cap to achieve the target (**$32k**) faster.
* IncrementFi Phase: it will be automatically form a new LP with the reserved coins in Tradable Pool or swap from IncrementFi, and then continue to be burned + added to the SwapPair of IncrementFi. **That means that Coin undergoes continuous deflation and appreciation as transactions increase in this mechanism.**

### Lockdrops and Airdrop

Ordinary users cannot freely adjust the allocation ratio when activating Tradable Pool (i.e., it must be 100%). However, if you are an advanced user of the platform (i.e., staking more than 100k $flows), not only can you reduce the proportion occupied by the Tradable Pool, but you can also use two additional modules: Lockdrops and Airdrops.

<figure><img src="/files/4A4CBYKHK2kWAf1ySNeq" alt=""><figcaption><p>Lockdrops</p></figcaption></figure>

#### ***Lockdrops Module:***

* Provided a function of locking a specific FT for a period of time to claim coins. The lockable tokens available for the issuer to choose from are $FLOW, $stFLOW, and $fixes.
* The issuer can set the token → coin multiplier by themselves, and this system provides 4 lock-in periods (1 month, 3 months, 6 months, 12 months). The longer the lock-in period, the more coins that can be claimed.
* After the lock-in period expires, users can withdraw the tokens locked in the Lockdrops Pool by themselves.

<figure><img src="/files/VXBSlw9jqUezLOcVXvzh" alt=""><figcaption><p>Airdrops</p></figcaption></figure>

#### ***Airdrops Module:***

* Provided a function that allows the issuer to distribute a whitelist address for airdrop, allowing them to claim coins on their own.
* In Settings, each setting action accumulates the Claimable Amount for the configured target whitelist addresses.

Note: The activation of these two modules can only be done when there are still unallocated quotas for the coin. If the coin has been almost fully allocated, it will not be possible to activate them. In the future, new allocation modules may be provided based on platform development.

### Metadata enhanced: DNA system

* Any memecoin created by the platform can be implemented by this system (because of the template contract)
* During buying and selling transactions, FT Vault has a random chance of obtaining DNA genes, with a total of 256 gene fragments, each ranging from quality level 1 to 16.
* Only important operations driven by Inscription will increase the chance of DNA mutation. Once the mutation chance reaches 0, no matter how you manipulate your FT Vault, its DNA cannot mutate again or gain experience.
* DNA provides users’ FT Vault with a certain degree of scarcity and cultivability. It does not have specific functions at present, but it provides on-chain data other than balance.
* **DNA is supposed to be expanded by other composability in the future.**

## &#x20;Guides

{% content-ref url="/pages/tqTU1QsyO8NKcoI6Hzjd" %}
[Guide 1: How to Launch a new Coin?](/concepts/fixes-coins/guide-1-how-to-launch-a-new-coin)
{% endcontent-ref %}


# Guide 1: How to Launch a new Coin?

With tradable pool activated.

### Step 1: Click the "Launch a new Coin" button in the landing page

<figure><img src="/files/MTdLJwooYEAbNzUmjlpk" alt=""><figcaption><p>Step 1</p></figcaption></figure>

### Step 2: Input the necessary information for your new Coin

<figure><img src="/files/Ru3Ac32T40oCEmE5aRA2" alt="" width="563"><figcaption><p>Step 2</p></figcaption></figure>

### Step 3:  Activate the Tradable Pool (Bonding Curve) to make it tradable.

For advanced users (who staked more than 100k $flows), **Advanced** is available for more configuration.

<figure><img src="/files/V1EZ1bBABfq6JA3bv3Pl" alt=""><figcaption><p>Step 3</p></figcaption></figure>

### Done! That's all. Enjoy trading!

<figure><img src="/files/m175mh7PdWKFddgbBrW3" alt=""><figcaption><p>Done</p></figcaption></figure>


# Lottery Game

A 100% on-chain lottery system in Fixes World

> Inspired by <https://www.powerball.com/>

### Basic Concept

**Ticket：**&#x20;

You need to participate by purchasing a Lottery Ticket.

**Balls：**

Each ticket contains 5 white balls and 1 red ball. They are all numbers, and the range of numbers:

* White Balls: **1 \~ 33**
* Red Ball: <mark style="color:red;">**1 \~ 16**</mark>

When your tickets matches the winning result according to the rules, you will receive the corresponding prize.

**Prizes and Jackpot:**

The jackpot grows until it is won. Players win a prize by matching one of the 9 ways to win. The jackpot is won by matching all five white balls in any order and the red ball.&#x20;

**PowerUp:**

You can choose to pay more when buying lottery tickets as **PowerUp** to increase the multiplier after winning.&#x20;

Note: The Jackpot is not affected by Powerup and only depends on the current accumulated Jackpot and the number of Jackpot winners.

### Game Pools

Currently, two prize pools are available.

* ID: FIXES\_MINTING\_LOTTERY\_POOL
  * The Prize Token is **$FLOW**.
  * Each ticket price is **0.1352 $FLOW (**&#x41;nd also you can take **1 $FLOW** to purchase **1 Ticket** and **mint 4000 $fixes** before **$fixes** are minted ou&#x74;**)**
  * The lottery will be drawn automatically every three days.
* ID: FIXES\_BASIS\_LOTTERY\_POOL
  * The Prize Token is **$fixes**
  * Each ticket price is **2000 $fixes**
  * The lottery will be drawn automatically every three days.

Note: customized numbers choosing is still WIP, current the number of tickets are generated randomly when purchasing.

For on-chain randomness on Flow, please refer to: <https://flow.com/post/on-chain-randomness-on-flow>

### Winning rules

<table><thead><tr><th width="137">PrizeRank</th><th width="223">Match Rule</th><th width="212">Estimated Prize</th><th>Service fee</th></tr></thead><tbody><tr><td>JACKPOT</td><td>5 <strong>White</strong> + 1 <mark style="color:red;"><strong>Red</strong></mark></td><td><strong>Grant Prize</strong></td><td><mark style="color:blue;"><strong>16%</strong></mark></td></tr><tr><td>SECOND</td><td>5 <strong>White</strong></td><td><mark style="color:green;"><strong>50000</strong></mark> x <strong>TicketPrice</strong></td><td><mark style="color:blue;"><strong>16%</strong></mark></td></tr><tr><td>THIRD</td><td>4 <strong>White</strong> + 1 <mark style="color:red;"><strong>Red</strong></mark></td><td><mark style="color:green;"><strong>5000</strong></mark> x <strong>TicketPrice</strong></td><td><mark style="color:blue;"><strong>16%</strong></mark></td></tr><tr><td>FOURTH</td><td>4 <strong>White</strong> / 3 <strong>White</strong> + 1 <mark style="color:red;"><strong>Red</strong></mark></td><td><mark style="color:green;"><strong>25</strong></mark> x <strong>TicketPrice</strong></td><td><mark style="color:blue;"><strong>0%</strong></mark></td></tr><tr><td>FIFTH</td><td>3 <strong>White</strong> / 2 <strong>White</strong> + 1 <mark style="color:red;"><strong>Red</strong></mark></td><td><mark style="color:green;"><strong>4</strong></mark> x <strong>TicketPrice</strong></td><td><mark style="color:blue;"><strong>0%</strong></mark></td></tr><tr><td>SIXTH</td><td>1 <strong>White</strong> + 1 <mark style="color:red;"><strong>Red</strong></mark> / 1 <mark style="color:red;"><strong>Red</strong></mark></td><td><mark style="color:green;"><strong>2</strong></mark> x <strong>TicketPrice</strong></td><td><mark style="color:blue;"><strong>0%</strong></mark></td></tr></tbody></table>

* The **Grant Prize** is at least **50%** of the current epoch's prize pool.&#x20;
* The remaining **50%** and the accumulated jackpot pool will be used to prioritize the payment of non-Jackpot prizes (Second \~ Sixth). The remaining prize money will all be included in the **Grant Prize**.
* If the total prize pool is too small, non-Jackpot prizes will decrease dynamically based on the balance of the total prize pool.
* The Prize of **Jackpot, Second, and Third** will be deducted by a certain *Service Fee*.
* The *Service Fee* will be deposited into the platform's treasury pools.
  1. For **$FLOW** Lottery, <mark style="color:blue;">**8%**</mark> will be deposited to **$flows** Staking Pool's reward strategy and <mark style="color:blue;">**8%**</mark> will be deposited to platform vault.
  2. For **𝔉rc20** Lottery, <mark style="color:blue;">**16%**</mark> will be deposited to **$flows** Staking Pool's reward strategy.


# 𝔉rc20s

An experimental application protocol of Fixes. The on-chain 𝔉rc20 token indexer and maintainer.

FRC20Indexer is an on-chain Indexer based on the Fixes inscription protocol, which is used to parse and utilize 𝔉rc20 tokens recorded in the Fixes inscription.

At the same time, it also provides support for the Treasury Pool for 𝔉rc20 Tokens, allowing the token value of frc20 to naturally increase during any operation regarding the token.

## 𝔉rc20 Types

𝔉rc20 Indexer offers two types of tokens:

* a standard mode that follows the [BRC-20 protocol](https://domo-2.gitbook.io/brc-20-experiment/)
* a burnable mode that allows `burn` operation by holders.

## How will the 𝔉rc20 Indexer handle $FLOW in the inscription?

* All operations performed on the 𝔉rc20 Indexer application Inscription will extract `$FLOW` to the corresponding Token Treasury Pool.
  * `5%` of them will be extracted and deposited into Platform Pool of 𝔉rc20 Indexer, which will provide certain support for FIXeS operational activities and cover development expenses.
* For burnable 𝔉rc20 Tokens, when the holder applies an 𝔉rc20 inscription containing a `burn` operation, the corresponding `$FLOW` tokens can be extracted from the Treasury Pool.

## 𝔉rc20 Pools

Indexer manages: **Treasury Pool, Staking Pool** and **Liquidity Pool(TBD)**

* Treasury Pool - Each 𝔉rc20 Token has its own Treasury Pool, and when any 𝔉rc20 Inscription is applied, the internal `$FLOW` will be automatically injected into this pool.
* Staking Pool - Users can share platform profits by staking platform 𝔉rc20 Tokens: `$FLOWS`, and they can also receive 𝔉rc20 vesting donated by users.
* Liquidity Pool(TBD) - 𝔉rc20 Token can form a trading pair with `$FLOW` Token and be added to the liquidity pool for users to swap. When the 𝔉rc20 Token is injected into the liquidity pool as staking mode, the Treasury Pool will automatically contribute a certain amount of `$FLOW` Token to provide liquidity.

## 𝔉rc20 Marketplace

> Marketplace is launched: <https://fixes.world/marketplace>

Check out the intro of FIXeS Marketplace:

{% embed url="<https://twitter.com/fixesOnFlow/status/1743141443294880155>" %}

## 𝔉rc20 Staking

> `$FLOWS` staking is open: <https://fixes.world/stake/flows>

Check out the intro of FIXeS Staking:

{% embed url="<https://twitter.com/fixesOnFlow/status/1751869111393817006>" %}


# Token List

A 100% On-chain Permissionless Fungible Token List on Flow Blockchain

TokenList is the platform for managing the Fungible Token list on-chain based on their on-chain [MetadataViews](https://github.com/onflow/flow-ft/blob/master/contracts/FungibleTokenMetadataViews.cdc).

And this service also provides an API endpoint to obtain the token list json.

## Contracts

| Contract Name | Testnet                                                                            | Mainnet                                                                            |
| ------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| BlackHole     | [0xad26718c4b6b921b](https://contractbrowser.com/A.ad26718c4b6b921b.BlackHole)     | [0x4396883a58c3a2d1](https://contractbrowser.com/A.4396883a58c3a2d1.BlackHole)     |
| FTViewUtils   | [0xb86f928a1fa7798e](https://contractbrowser.com/A.b86f928a1fa7798e.FTViewUtils)   | [0x15a918087ab12d86](https://contractbrowser.com/A.15a918087ab12d86.FTViewUtils)   |
| ViewResolvers | [0xb86f928a1fa7798e](https://contractbrowser.com/A.b86f928a1fa7798e.ViewResolvers) | [0x15a918087ab12d86](https://contractbrowser.com/A.15a918087ab12d86.ViewResolvers) |
| TokenList     | [0xb86f928a1fa7798e](https://contractbrowser.com/A.b86f928a1fa7798e.TokenList)     | [0x15a918087ab12d86](https://contractbrowser.com/A.15a918087ab12d86.TokenList)     |

## API Endpoints

{% content-ref url="/pages/ZE6pRyVkpSyBtUYWNVBW" %}
[Query TokenList](/concepts/token-list/query-tokenlist)
{% endcontent-ref %}

{% content-ref url="/pages/PIrrfVTiQYNtAbOeAViu" %}
[Query Reviewers](/concepts/token-list/query-reviewers)
{% endcontent-ref %}


# Query TokenList

Get all fungible tokens

#### **Mainnet**

<mark style="color:green;">`GET`</mark> *<https://token-list.fixes.world/api/token-list\\[/:reviewer]\\[?filter=]\\[\\&page=]\\[\\&limit=>]*

#### **Testnet**

<mark style="color:green;">`GET`</mark> *<https://testnet-token-list.fixes.world/api/token-list\\[/:reviewer]\\[?filter=]\\[\\&page=]\\[\\&limit=>]*

#### **Parameter**

<table><thead><tr><th width="137">Name</th><th width="105">Type</th><th width="107">Default</th><th>Description</th></tr></thead><tbody><tr><td><code>reviewer</code></td><td>Address</td><td>undefined</td><td>When no Reviewer is set, the default list will be returned. If a reviewer is set, the data customized by the reviewer will be returned.</td></tr></tbody></table>

#### **Query**

<table><thead><tr><th width="135">Name</th><th width="107">Type</th><th width="109">Default</th><th>Description</th></tr></thead><tbody><tr><td><code>filter</code></td><td>Number</td><td>0</td><td><pre><code>0 - All
1 - Reviewed by Reviewer
2 - Managed by Reviewer
3 - Verified by Reviewer
4 - Featured by Reviewer
</code></pre></td></tr><tr><td><code>page</code></td><td>Number</td><td>undefined</td><td>If set, use Pagination; otherwise, retrieve all.</td></tr><tr><td><code>limit</code></td><td>Number</td><td>undefined</td><td>If set, use Pagination; otherwise, retrieve all.</td></tr></tbody></table>

#### **Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "name": "Flow Token List",
  "tokens": [
    {
      "address": "0xf8d6e0586b0a20c7",
      "contractName": "ExampleToken",
      "path": {
        "vault": "/storage/exampleTokenVault",
        "receiver": "/public/exampleTokenReceiver",
        "balance": "/public/exampleTokenMetadata"
      },
      "symbol": "EFT",
      "name": "Example Fungible Token",
      "description": "Hello World1\nThis fungible token is used as an example to help you develop your next FT #onFlow.",
      "decimals": 8,
      "logoURI": "https://assets.website-files.com/5f6294c0c7a8cdd643b1c820/5f6294c0c7a8cda55cb1c936_Flow_Wordmark.svg",
      "tags": [],
      "extensions": {
        "twitter": "https://twitter.com/flow_blockchain",
        "website": "https://example-ft.onflow.org",
        "displaySource": "0x179b6b1cb6755e31"
      }
    }
  ],
  "totalAmount": 1,
  "filterType": "ALL",
  "timestamp": "2024-04-18T13:28:20.423Z",
  "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.1654653399040a61.FlowToken/logo.svg",
  "keywords": [
    "Flow",
    "Cadence",
    "EVM",
    "DeFi",
    "NFT",
    "FT",
    "Dapp",
    "Blockchain",
    "Crypto"
  ],
  "tags": {
    "stablecoin": {
      "name": "stablecoin",
      "description": "Tokens that are fixed to an external asset, e.g. the US dollar"
    },
    "ethereum": {
      "name": "ethereum",
      "description": "Asset bridged from ethereum"
    },
    "wrapped-celer": {
      "name": "wrapped-celer",
      "description": "Asset wrapped using celer bridge"
    },
    "lp-token": {
      "name": "lp-token",
      "description": "Asset representing liquidity provider token"
    },
    "utility-token": {
      "name": "utility-token",
      "description": "Tokens that are designed to be spent within a certain blockchain ecosystem"
    },
    "governance-token": {
      "name": "governance-token",
      "description": "Tokens that are designed to be use in community governance and maintenance"
    },
    "memecoin": {
      "name": "memecoin",
      "description": "Tokens that are created for fun and meme"
    }
  },
  "version": {
    "major": 1,
    "minor": 0,
    "patch": 0
  }
}
```

{% endtab %}

{% tab title="400" %}

```json
{
    "success": false,
    "error": {
        "message": "The reviewer address is invalid"
    }
}
```

{% endtab %}
{% endtabs %}


# Query Reviewers

Get all reviewers

#### **Mainnet**

<mark style="color:green;">`GET`</mark> *<https://token-list.fixes.world/api/reviewers>*

#### **Testnet**

<mark style="color:green;">`GET`</mark> *<https://testnet-token-list.fixes.world/api/reviewers>*

#### **Parameter**

None

#### **Query**

None

#### **Response**

{% tabs %}
{% tab title="200" %}

```json
[
    {
        "address": "0xa2de93114bae3e73",
        "verified": true,
        "name": "Fixes World",
        "url": "https://linktr.ee/fixes.world",
        "managedTokenAmt": 30,
        "reviewedTokenAmt": 45,
        "customziedTokenAmt": 36
    }
]
```

{% endtab %}

{% tab title="400" %}

```json
{
    "success": false,
    "error": {
        "message": ""
    }
}
```

{% endtab %}
{% endtabs %}


# On-chain Interactions

Welcome to FIXeS on-chain interactions documentation

## Overview

In this section, we provide detailed instructions on interacting with the FIXeS contract on the blockchain. To effectively interact with the FIXeS contract, users should possess a basic understanding of blockchain technology, smart contracts, and the Flow blockchain that the FIXeS contract is deployed on.

***

## Getting Started

You can get the contract address of FIXeS here: [Fixes Inscription](/concepts/fixes-inscription#contracts)

For front-end or NodeJS projects, we have prepared a more user-friendly way of integration. You can follow this guide to get started.

### Requirements

* Node version `v16.0.0 or higher`.
* FCL(Flow Client Library) installation: [Official Doc](https://developers.flow.com/tools/clients/fcl-js)

### Dependencies Installation

Install FIXeS contracts to your application via `npm`,  `yarn,` or `pnpm`

```bash
npm i @fixes/contracts
```

```bash
yarn add @fixes/contracts
```

```bash
pnpm add @fixes/contracts
```

### Include \*.cdc assets for your project

Interacting with the Flow blockchain requires using [transactions](https://developers.flow.com/tools/clients/fcl-js/transactions)/[scripts](https://developers.flow.com/tools/clients/fcl-js/scripts), and all necessary ones are included in `@fixes/contracts` package. However, to use them in your application, you need to make sure that your building tool can recognize this file extension first.

Using [Vite](https://vitejs.dev/) as an example, you need to add this field in [vite.config.js](https://vitejs.dev/config/shared-options.html#assetsinclude):&#x20;

```javascript
{
    assetsInclude: ["**/*.cdc"],
}
```

### How to quickly set up FCL ?

> FCL is an all-in-one JS library to interact with Flow blockchain, If you are not familiar with it, you can refer to the code below.

Here is an independent wrapped class of FCL :

```typescript
/// This is a TypeScript example
/// If some type is not found, you can directly change it to any

import * as fcl from "@onflow/fcl";
import type { Account, TransactionStatus } from "@onflow/typedefs";

export type NetworkType = "mainnet" | "testnet" | "emulator";

let isGloballyInited = false;
let globallyPromise = null;

export class FlowService {
  public readonly network: NetworkType;
  private readonly flowJSON: object;

  /**
   * Initialize the Flow SDK
   */
  constructor(flowJSON: object) {
    this.network =
      (import.meta.env.PUBLIC_FLOW_NETWORK as NetworkType) ?? "emulator";
    this.flowJSON = flowJSON;
  }

  async onModuleInit() {
    if (isGloballyInited) return;

    const cfg = fcl.config();
    // Required
    await cfg.put("flow.network", this.network);
    // Set the maximum of gas limit
    await cfg.put("fcl.limit", 9999);

    // Note: If you don't need to be compatible with an FCL-compatible wallet
    // you don't need to configure these two parameters.
    await cfg.put("app.detail.title", "App Title");
    await cfg.put("app.detail.icon", "App Icon URL");

    switch (this.network) {
      case "mainnet":
        // Required
        await cfg.put(
          "accessNode.api",
          import.meta.env.PUBLIC_MAINNET_ENDPOINT ??
            "https://mainnet.onflow.org"
        );

        // Note: If you don't need to be compatible with an FCL-compatible wallet
        // you don't need to configure these two following parameters.
        await cfg.put(
          "discovery.wallet",
          "https://fcl-discovery.onflow.org/authn"
        );
        await cfg.put(
          "discovery.authn.endpoint",
          "https://fcl-discovery.onflow.org/api/authn"
        );
        break;
      case "testnet":
        // Required
        await cfg.put("accessNode.api", "https://testnet.onflow.org");

        // Note: If you don't need to be compatible with an FCL-compatible wallet
        // you don't need to configure these two following parameters.
        await cfg.put(
          "discovery.wallet",
          "https://fcl-discovery.onflow.org/testnet/authn"
        );
        await cfg.put(
          "discovery.authn.endpoint",
          "https://fcl-discovery.onflow.org/api/testnet/authn"
        );
        break;
      case "emulator":
        // Required
        await cfg.put("accessNode.api", "http://localhost:8888");

        // Note: If you don't need to be compatible with an FCL-compatible wallet
        // you don't need to configure these following parameters.
        await cfg.put("discovery.wallet", "http://localhost:8701/fcl/authn");
        break;
      default:
        throw new Error(`Unknown network: ${String(this.network)}`);
    }

    // Load Flow JSON
    await cfg.load({ flowJSON: this.flowJSON });

    isGloballyInited = true;
  }

  /**
   * Ensure the Flow SDK is initialized
   */
  private async ensureInited() {
    if (isGloballyInited) return;
    if (!globallyPromise) {
      globallyPromise = this.onModuleInit();
    }
    return await globallyPromise;
  }

  /**
   * Authenticate for current user
   * Only supported on the front-end.
   */
  async authenticate() {
    await this.ensureInited();
    fcl.authenticate();
  }

  /**
   * Logout
   * Only supported on the front-end.
   */
  unauthenticate() {
    fcl.unauthenticate();
  }

  /**
   * Get the current logged-in
   * Only supported on the front-end.
   */
  get currentUser() {
    return fcl.currentUser;
  }

  /**
   * Get account information
   */
  async getAccount(addr: string): Promise<Account> {
    await this.ensureInited();
    return await fcl.send([fcl.getAccount(addr)]).then(fcl.decode);
  }

  /**
   * General method of sending transaction
   */
  async sendTransaction(
    code: string,
    args: fcl.ArgumentFunction,
    mainAuthz?: fcl.FclAuthorization,
    extraAuthz?: fcl.FclAuthorization[]
  ) {
    await this.ensureInited();
    if (typeof mainAuthz !== "undefined") {
      return await fcl.mutate({
        cadence: code,
        args: args,
        proposer: mainAuthz,
        payer: mainAuthz,
        authorizations:
          (extraAuthz?.length ?? 0) === 0
            ? [mainAuthz]
            : [mainAuthz, ...extraAuthz],
      });
    } else {
      return await fcl.mutate({
        cadence: code,
        args: args,
      });
    }
  }

  /**
   * Get transaction status
   */
  async getTransactionStatus(
    transactionId: string
  ): Promise<TransactionStatus> {
    await this.ensureInited();
    return await fcl.tx(transactionId).onceExecuted();
  }

  /**
   * Get chain id
   */
  async getChainId() {
    await this.ensureInited();
    return await fcl.getChainId();
  }

  /**
   * Send transaction with single authorization
   */
  async onceTransactionSealed(
    transactionId: string
  ): Promise<TransactionStatus> {
    await this.ensureInited();
    return fcl.tx(transactionId).onceSealed();
  }

  /**
   * Get block object
   * @param blockId
   */
  async getBlockHeaderObject(blockId: string): Promise<fcl.BlockHeaderObject> {
    await this.ensureInited();
    return await fcl
      // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
      .send([fcl.getBlockHeader(), fcl.atBlockId(blockId)])
      .then(fcl.decode);
  }

  /**
   * Send script
   */
  async executeScript<T>(
    code: string,
    args: fcl.ArgumentFunction,
    defaultValue: T
  ): Promise<T> {
    await this.ensureInited();
    try {
      const queryResult = await fcl.query({
        cadence: code,
        args,
      });
      return (queryResult as T) ?? defaultValue;
    } catch (e) {
      console.error(e);
      return defaultValue;
    }
  }
}
```

If you don't need to use an FCL-compatible wallet for on-chain interactions, you can use this `Signer` class:

```typescript
import elliptic from "elliptic";
import { SHA3 } from "sha3";
import * as fcl from "@onflow/fcl";

import { FlowService } from "./flow.service";
// Here is the configuration file for fixes.
import flowJSON from "@fixes/contracts/flow.json" assert { type: "json" };

const ec = new elliptic.ec("p256");

export default class FlowSigner {
  private readonly flowService: FlowService;

  constructor(
    private readonly address: string,
    private readonly privateKeyHex: string,
    private readonly accountIndex: string
  ) {
    this.flowService = new FlowService(flowJSON);
  }

  /**
   * Send a transaction
   * @param code Cadence code
   * @param args Cadence arguments
   */
  async sendTransaction(code: string, args: fcl.ArgumentFunction) {
    return await this.flowService.sendTransaction(
      code,
      args,
      this._buildAuthorization()
    );
  }

  /**
   * Execute a script
   * @param code Cadence code
   * @param args Cadence arguments
   */
  async executeScript<T>(
    code: string,
    args: fcl.ArgumentFunction,
    defaultValue: T
  ): Promise<T> {
    return await this.flowService.executeScript(code, args, defaultValue);
  }

  /**
   * Build authorization
   */
  private _buildAuthorization() {
    const address = this.address;
    const accountIndex = this.accountIndex;
    const privateKey = this.privateKeyHex;
    return async (account) => {
      return {
        ...account,
        tempId: `${address}-${accountIndex}`,
        addr: fcl.sansPrefix(address),
        keyId: Number(accountIndex),
        signingFunction: (signable) => {
          return {
            addr: fcl.withPrefix(address),
            keyId: Number(accountIndex),
            signature: this._signWithKey(privateKey, signable.message),
          };
        },
      };
    };
  }

  /**
   * Sign a message with a private key
   */
  private _signWithKey(privateKey: string, msg: string) {
    const key = ec.keyFromPrivate(Buffer.from(privateKey, "hex"));
    const sig = key.sign(this._hashMsg(msg));
    const n = 32;
    const r = sig.r.toArrayLike(Buffer, "be", n);
    const s = sig.s.toArrayLike(Buffer, "be", n);
    return Buffer.concat([r, s]).toString("hex");
  }

  /**
   * Hash a message
   */
  private _hashMsg(msg: string) {
    const sha = new SHA3(256);
    sha.update(Buffer.from(msg, "hex"));
    return sha.digest();
  }
} 
```

#### How to send a transaction to Flow blockchain or query data from Flow blockchain?

Here are some example codes. [learn more from the official doc](https://developers.flow.com/tools/clients/fcl-js/api#mutate)

> In the following documentation, `flow` means an instence of `flowSigner` or `flowService` as the subject of function calls.

```typescript
// FIXeS configure
import flowJSON from "@fixes/contracts/flow.json" assert { type: "json" };
// FIXeS Transactions
import txHeartbeatStaking from "@fixes/contracts/transactions/staking/heartbeat-staking.cdc?raw";
// FIXeS Scripts
import scResolveName from "@fixes/contracts/scripts/utils/resolve-name.cdc?raw";

import { FlowService } from "./flow.service";
import FlowSigner from "./Signer";

async function heartbeat(tickerName: string): Promise<string> {
    const flowSigner = new FlowSigner(signerAddr, signerPrivKey, signerKeyId);
    // If you want to directly use FCL-compatible wallets on the frontend,
    // you can also use flowService here, but you need to connect the wallet 
    // first using flowService.authenticate
    const txid = await flowSigner.sendTransaction(
      txHeartbeatStaking,
      (arg, t) => [arg(tickerName, t.String)]
    );
    return txid;
}

async function resolveAddressName(addr: string): Promise<string> {
    const flowService = new FlowService(flowJSON);
    return await flowService.executeScript(
        scResolveName,
        (arg, t) => [arg(addr, t.Address)]
        addr
    )
}
```

***

### 𝔉rc20 Interactions

{% content-ref url="/pages/V9VS1M69zflKpcrn7AIb" %}
[𝔉rc20](/developer/on-chain-interactions/rc20)
{% endcontent-ref %}

### Fixes Inscription Interactions

{% content-ref url="/pages/aYP038SoXXGsZwfRUmA5" %}
[Fixes Inscription](/developer/on-chain-interactions/fixes-inscription)
{% endcontent-ref %}


# 𝔉rc20

Here are the articles in this section

<table data-card-size="large" data-view="cards"><thead><tr><th data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/rQcYu9e9mC2WEkifqalm">/pages/rQcYu9e9mC2WEkifqalm</a></td></tr><tr><td><a href="/pages/MgwHNBFpIDYrhh0PXaVk">/pages/MgwHNBFpIDYrhh0PXaVk</a></td></tr><tr><td><a href="/pages/hXXNmYQhfDptHx09I1ep">/pages/hXXNmYQhfDptHx09I1ep</a></td></tr><tr><td><a href="/pages/JHTQQzxu4Nwjwrjybb0Y">/pages/JHTQQzxu4Nwjwrjybb0Y</a></td></tr><tr><td><a href="/pages/N4PRgmjP9h4gGAtuDweX">/pages/N4PRgmjP9h4gGAtuDweX</a></td></tr><tr><td><a href="/pages/oheOVhIHBJpZXVyNrsZF">/pages/oheOVhIHBJpZXVyNrsZF</a></td></tr><tr><td><a href="/pages/IvDn9WU5XFA2TKCbmH9w">/pages/IvDn9WU5XFA2TKCbmH9w</a></td></tr><tr><td><a href="/pages/a1RYy5uXknPE4Kft2XaE">/pages/a1RYy5uXknPE4Kft2XaE</a></td></tr><tr><td><a href="/pages/7coRuTPi9eGozyVD6VxU">/pages/7coRuTPi9eGozyVD6VxU</a></td></tr></tbody></table>


# Deploy - tx

Deploy a new 𝔉rc20 token

#### Example of Fixes Inscription data string:

```
op=deploy,tick=fixes,max=1000000000.0,limit=1000.0,burnable=1
```

#### Transaction parameters:

<table><thead><tr><th width="116" align="center">Key</th><th width="108" data-type="checkbox">Required</th><th width="100" align="center">FType</th><th>Description</th></tr></thead><tbody><tr><td align="center">tick</td><td>true</td><td align="center">t.String</td><td>Ticker: identity of the 𝔉rc20 token</td></tr><tr><td align="center">max</td><td>true</td><td align="center">t.UFix64</td><td>Max supply: Set max supply of the 𝔉rc20 token</td></tr><tr><td align="center">limit</td><td>true</td><td align="center">t.UFix64</td><td>Mint limit: limit per inscription</td></tr><tr><td align="center">burnable</td><td>true</td><td align="center">t.Bool</td><td><p>Is this 𝔉rc20 a burnable inscription.</p><p>Recommended to set it as true.</p></td></tr></tbody></table>

#### Transaction code example:

```typescript
import txDeployFRC20 from "@fixes/contracts/transactions/deploy-frc20.cdc?raw";

interface TokenMetaDto {
  tick: string;
  max: number;
  limit: number;
  burnable: boolean;
}

async function deploy(token: TokenMetaDto) {
  return await flow.sendTransaction(txDeployFRC20, (arg, t) => [
      arg(token.tick, t.String),
      arg(token.max.toFixed(8), t.UFix64),
      arg(token.limit.toFixed(8), t.UFix64),
      arg(token.burnable, t.Bool),
  ]);
}
```

#### Transaction source code

{% @github-files/github-code-block url="<https://github.com/fixes-world/fixes/blob/main/cadence/transactions/deploy-frc20.cdc>" %}

#### Related docs

* [EstimateCost - read](/developer/on-chain-interactions/fixes-inscription/estimatecost-read)
* [On-chain Interactions](/developer/on-chain-interactions#how-to-send-a-transaction-to-flow-blockchain-or-query-data-from-flow-blockchain)
* [Check if tick is registered](https://github.com/fixes-world/fixes/blob/main/cadence/scripts/has-tick-registered.cdc)


# Mint(batch) - tx

Mint 𝔉rc20 token

#### Example of Fixes Inscription data string:

```
op=mint,tick=fixes,amt=1000.0
```

#### Transaction parameters:

<table><thead><tr><th width="116" align="center">Key</th><th width="108" data-type="checkbox">Required</th><th width="100" align="center">FType</th><th>Description</th></tr></thead><tbody><tr><td align="center">tick</td><td>true</td><td align="center">t.String</td><td>Ticker: identity of the 𝔉rc20 token</td></tr><tr><td align="center">amt</td><td>true</td><td align="center">t.UFix64</td><td>Amount to mint: States the amount of the 𝔉rc20 token to mint. Has to be less or equal to "limit" </td></tr><tr><td align="center">repeats</td><td>true</td><td align="center">t.UInt64</td><td>How many times to repeat the mint action. Better less than or equal to 100 times.</td></tr></tbody></table>

#### Transaction code example:

```typescript
import txBatchMintFRC20 from "@fixes/contracts/transactions/batch-mint-frc20.cdc?raw";
import txMintFRC20 from "@fixes/contracts/transactions/mint-frc20.cdc?raw";

async function mint(
  tick: string,
  amt: number,
  repeats: number = 1
) {
  let txid: string;
  if (repeats > 1) {
    txid = await flow.sendTransaction(txBatchMintFRC20, (arg, t) => [
      arg(tick, t.String),
      arg(amt.toFixed(8), t.UFix64),
      arg(repeats, t.UInt64),
    ]);
  } else {
    txid = await flow.sendTransaction(txMintFRC20, (arg, t) => [
      arg(tick, t.String),
      arg(amt.toFixed(8), t.UFix64),
    ]);
  }
  return txid;
}
```

#### Transaction source code

{% @github-files/github-code-block url="<https://github.com/fixes-world/fixes/blob/main/cadence/transactions/batch-mint-frc20.cdc>" %}

Or mint simple inscription

<https://github.com/fixes-world/fixes/blob/main/cadence/transactions/mint-frc20.cdc>

#### Related docs

* [EstimateCost - read](/developer/on-chain-interactions/fixes-inscription/estimatecost-read)
* [On-chain Interactions](/developer/on-chain-interactions#how-to-send-a-transaction-to-flow-blockchain-or-query-data-from-flow-blockchain)


# Transfer - tx

Transfer 𝔉rc20 token

#### Example of Fixes Inscription data string:

```
op=transfer,tick=fixes,amt=100000.0,to=0xd2abb5dbf5e08666
```

#### Transaction parameters:

<table><thead><tr><th width="116" align="center">Key</th><th width="108" data-type="checkbox">Required</th><th width="106" align="center">FType</th><th>Description</th></tr></thead><tbody><tr><td align="center">tick</td><td>true</td><td align="center">t.String</td><td>Ticker: identity of the 𝔉rc20 token</td></tr><tr><td align="center">amt</td><td>true</td><td align="center">t.UFix64</td><td>Amount to transfer: States the amount of the 𝔉rc20 to transfer.</td></tr><tr><td align="center">to</td><td>true</td><td align="center">t.Address</td><td>The recipient of 𝔉rc20 tokens.</td></tr></tbody></table>

#### Transaction code example:

```typescript
import txTransferFRC20 from "@fixes/contracts/transactions/transfer-frc20.cdc?raw";

async function transferFRC20(
  tick: string,
  to: string,
  amt: number
) {
  const txid = await flow.sendTransaction(txTransferFRC20, (arg, t) => [
    arg(tick, t.String),
    arg(amt.toFixed(8), t.UFix64),
    arg(to, t.Address),
  ]);
  return txid;
}
```

#### Transaction source code

{% @github-files/github-code-block url="<https://github.com/fixes-world/fixes/blob/main/cadence/transactions/transfer-frc20.cdc>" %}

#### Related docs

* [EstimateCost - read](/developer/on-chain-interactions/fixes-inscription/estimatecost-read)
* [On-chain Interactions](/developer/on-chain-interactions#how-to-send-a-transaction-to-flow-blockchain-or-query-data-from-flow-blockchain)


# Burn - tx

Burn 𝔉rc20 token (only for burnable 𝔉rc20)

#### Example of Fixes Inscription data string:

```
op=burn,tick=fixes,amt=100000.0
```

#### Transaction parameters:

<table><thead><tr><th width="116" align="center">Key</th><th width="108" data-type="checkbox">Required</th><th width="100" align="center">FType</th><th>Description</th></tr></thead><tbody><tr><td align="center">tick</td><td>true</td><td align="center">t.String</td><td>Ticker: identity of the 𝔉rc20 token</td></tr><tr><td align="center">amt</td><td>true</td><td align="center">t.UFix64</td><td>Amount to burn: States the amount of the 𝔉rc20 token to burn</td></tr></tbody></table>

#### Transaction code example:

```typescript
import txBurnFRC20 from "@fixes/contracts/transactions/burn-frc20.cdc?raw";

export async function burnFRC20(
  tick: string,
  amt: number
) {
  const txid = await flow.sendTransaction(txBurnFRC20, (arg, t) => [
    arg(tick, t.String),
    arg(amt.toFixed(8), t.UFix64),
  ]);
  return txid;
}
```

#### Transaction source code

{% @github-files/github-code-block url="<https://github.com/fixes-world/fixes/blob/main/cadence/transactions/burn-frc20.cdc>" %}

#### Related docs

* [EstimateCost - read](/developer/on-chain-interactions/fixes-inscription/estimatecost-read)
* [On-chain Interactions](/developer/on-chain-interactions#how-to-send-a-transaction-to-flow-blockchain-or-query-data-from-flow-blockchain)


# List for Sale - tx

List 𝔉rc20 token to the marketplace for sale

#### Example of Fixes Inscription data string:

```
op=list-buynow,tick=fixes,amt=100000.0,price=0.001
```

#### Transaction parameters:

<table><thead><tr><th width="173" align="center">Key</th><th width="99" data-type="checkbox">Required</th><th width="109" align="center">FType</th><th>Description</th></tr></thead><tbody><tr><td align="center">tick</td><td>true</td><td align="center">t.String</td><td>Ticker: identity of the 𝔉rc20 token</td></tr><tr><td align="center">sellAmount</td><td>true</td><td align="center">t.UFix64</td><td>Amount to sell: States the amount of the 𝔉rc20 token to sell</td></tr><tr><td align="center">sellPrice</td><td>true</td><td align="center">t.UFix64</td><td>Total Price: The total price of selling these 𝔉rc20 tokens.</td></tr><tr><td align="center">commissionAddr</td><td>true</td><td align="center">t.Address</td><td>The address for collecting fees commission splits, 10% of the fees will be sent to this address. (If the listing is not listed in the official market, the original 10% of deployers will be overrided as commission. <a href="https://twitter.com/fixesOnFlow/status/1743141451742208176">learn more</a>)</td></tr><tr><td align="center">customID</td><td>true</td><td align="center">t.String</td><td>The third party market identity (eg. MyMarket)</td></tr></tbody></table>

#### Transaction code example:

```typescript
import txUserListAsBuyNow from "@fixes/contracts/transactions/marketplace/user-list-as-buy-now-with-commission.cdc?raw";

async function userListAsBuyNow(
  tick: string,
  sellAmount: number,
  sellPrice: number,
  commissionAddr: string,
  customID: string,
) {
  const txid = await flow.sendTransaction(txUserListAsBuyNow, (arg, t) => [
    arg(tick, t.String),
    arg(sellAmount.toFixed(8), t.UFix64),
    arg(sellPrice.toFixed(8), t.UFix64),
    arg(commissionAddr, t.Address),
    arg(customID, t.String),
  ]);
  return txid;
}
```

#### Transaction source code

{% @github-files/github-code-block url="<https://github.com/fixes-world/fixes/blob/main/cadence/transactions/marketplace/user-list-as-buy-now-with-commission.cdc>" %}

#### Related docs

* [EstimateCost - read](/developer/on-chain-interactions/fixes-inscription/estimatecost-read)
* [On-chain Interactions](/developer/on-chain-interactions#how-to-send-a-transaction-to-flow-blockchain-or-query-data-from-flow-blockchain)


# Take list as buyer  - tx

Take the 𝔉rc20 token sale listing as a buyer

#### Example of Fixes Inscription data string:

```
op=list-take-buynow,tick=fixes,amt=10000.0
```

#### Transaction parameters:

<table><thead><tr><th width="161" align="center">Key</th><th width="102" data-type="checkbox">Required</th><th width="169" align="center">FType</th><th>Description</th></tr></thead><tbody><tr><td align="center">tick</td><td>true</td><td align="center">t.String</td><td>Ticker: identity of the 𝔉rc20 token</td></tr><tr><td align="center">batchBuyItems</td><td>true</td><td align="center">t.Dictionary({ key: t.String, value: t.UFix64 })</td><td><p>The dictionary for buying:</p><p><code>rankedId => Amount</code> <br>You can get RankedListingId by querying the marketplace</p></td></tr></tbody></table>

:notebook:**Note:** The key of `batchBuyItems` should be `itemInMarket.rankedId` which can be obtained in the response of querying listings. and the value is how much tokens you will take in the order. **𝔉rc20 trading orders support partial deal.**

#### Transaction code example:

```typescript
import txUserTakeAsBuyer from "@fixes/contracts/transactions/marketplace/user-take-as-buyer-with-commission.cdc?raw";

async function userTakeAsBuyer(
  tick: string,
  batchBuyItems: Record<string, number>
) {
  let args: Array<{ key: string; value: string }> = [];
  for (const key in batchBuyItems) {
    if (!Object.prototype.hasOwnProperty.call(batchBuyItems, key)) continue;
    args.push({
      key,
      value: batchBuyItems[key].toFixed(8),
    });
  }
  const txid = await flow.sendTransaction(txUserTakeAsBuyer, (arg, t) => [
    arg(tick, t.String),
    arg(args, t.Dictionary({ key: t.String, value: t.UFix64 })),
  ]);
  return txid;
}
```

#### Transaction source code

{% @github-files/github-code-block url="<https://github.com/fixes-world/fixes/blob/main/cadence/transactions/marketplace/user-take-as-buyer-with-commission.cdc>" %}

#### Related docs

* [EstimateCost - read](/developer/on-chain-interactions/fixes-inscription/estimatecost-read)
* [On-chain Interactions](/developer/on-chain-interactions#how-to-send-a-transaction-to-flow-blockchain-or-query-data-from-flow-blockchain)
* [Query 𝔉rc20 Listings](/developer/open-api-service/rc20-marketplace/query-rc20-listings)


# List for Purchase - tx

List 𝔉rc20 token to the marketplace for purchase

#### Example of Fixes Inscription data string:

```
op=list-sellnow,tick=fixes,amt=100000.0,price=0.001
```

#### Transaction parameters:

<table><thead><tr><th width="173" align="center">Key</th><th width="99" data-type="checkbox">Required</th><th width="109" align="center">FType</th><th>Description</th></tr></thead><tbody><tr><td align="center">tick</td><td>true</td><td align="center">t.String</td><td>Ticker: identity of the 𝔉rc20 token</td></tr><tr><td align="center">buyAmount</td><td>true</td><td align="center">t.UFix64</td><td>Amount to buy: States the amount of the 𝔉rc20 token to buy</td></tr><tr><td align="center">buyPrice</td><td>true</td><td align="center">t.UFix64</td><td>Total Price: The total price of buying these 𝔉rc20 tokens.</td></tr><tr><td align="center">commissionAddr</td><td>true</td><td align="center">t.Address</td><td>The address for collecting fees commission splits, 10% of the fees will be sent to this address. (If the listing is not listed in the official market, the original 10% of deployers will be overrided as commission. <a href="https://twitter.com/fixesOnFlow/status/1743141451742208176">learn more</a>)</td></tr><tr><td align="center">customID</td><td>true</td><td align="center">t.String</td><td>The third party market identity (eg. MyMarket)</td></tr></tbody></table>

#### Transaction code example:

```typescript
import txUserListAsSellNow from "@fixes/contracts/transactions/marketplace/user-list-as-sell-now-with-commission.cdc?raw";

async function userListAsSellNow(
  tick: string,
  buyAmount: number,
  buyPrice: number,
  commissionAddr: string,
  customID: string,
) {
  const txid = await flow.sendTransaction(flowSrv, txUserListAsSellNow, (arg, t) => [
    arg(tick, t.String),
    arg(buyAmount.toFixed(8), t.UFix64),
    arg(buyPrice.toFixed(8), t.UFix64),
    arg(commissionAddr, t.Address),
    arg(customID, t.String),
  ]);
  return txid;
}
```

#### Transaction source code

{% @github-files/github-code-block url="<https://github.com/fixes-world/fixes/blob/main/cadence/transactions/marketplace/user-list-as-sell-now-with-commission.cdc>" %}

#### Related docs

* [EstimateCost - read](/developer/on-chain-interactions/fixes-inscription/estimatecost-read)
* [On-chain Interactions](/developer/on-chain-interactions#how-to-send-a-transaction-to-flow-blockchain-or-query-data-from-flow-blockchain)


# Take list as seller  - tx

Take the 𝔉rc20 token purchase listing as a seller

#### Example of Fixes Inscription data string:

```
op=list-take-sellnow,tick=fixes,amt=10000.0
```

#### Transaction parameters:

<table><thead><tr><th width="161" align="center">Key</th><th width="72" data-type="checkbox">Required</th><th width="161" align="center">FType</th><th>Description</th></tr></thead><tbody><tr><td align="center">tick</td><td>true</td><td align="center">t.String</td><td>Ticker: identity of the 𝔉rc20 token</td></tr><tr><td align="center">batchSellItems</td><td>true</td><td align="center">t.Dictionary({ key: t.String, value: t.UFix64 })</td><td><p>The dictionary for selling:</p><p><code>rankedId => Amount</code> <br>You can get RankedListingId by querying the marketplace</p></td></tr></tbody></table>

:notebook:**Note:** The key of `batchSellItems` should be `itemInMarket.rankedId` which can be obtained in the response of querying listings. and the value is how much tokens you will take in the order. **𝔉rc20 trading orders support partial deal.**

#### Transaction code example:

```typescript
import txUserTakeAsSeller from "@fixes/contracts/transactions/marketplace/user-take-as-seller-with-commission.cdc?raw";

async function userTakeAsSeller(
  tick: string,
  batchSellItems: Record<string, number>
) {
  let args: Array<{ key: string; value: string }> = [];
  for (const key in batchSellItems) {
    if (!Object.prototype.hasOwnProperty.call(batchSellItems, key)) continue;
    args.push({
      key,
      value: batchSellItems[key].toFixed(8),
    });
  }
  const txid = await flow.sendTransaction(txUserTakeAsSeller, (arg, t) => [
    arg(tick, t.String),
    arg(args, t.Dictionary({ key: t.String, value: t.UFix64 })),
  ]);
  return txid;
}
```

#### Transaction source code

{% @github-files/github-code-block url="<https://github.com/fixes-world/fixes/blob/main/cadence/transactions/marketplace/user-take-as-seller-with-commission.cdc>" %}

#### Related docs

* [EstimateCost - read](/developer/on-chain-interactions/fixes-inscription/estimatecost-read)
* [On-chain Interactions](/developer/on-chain-interactions#how-to-send-a-transaction-to-flow-blockchain-or-query-data-from-flow-blockchain)
* [Query 𝔉rc20 Listings](/developer/open-api-service/rc20-marketplace/query-rc20-listings)


# Cancel Listing - tx

Cancel a 𝔉rc20 token listing

This transaction does not need to inscribe, so it does not include the cost of inscriptions.

#### Transaction parameters:

<table><thead><tr><th width="173" align="center">Key</th><th width="99" data-type="checkbox">Required</th><th width="109" align="center">FType</th><th>Description</th></tr></thead><tbody><tr><td align="center">listingId</td><td>true</td><td align="center">t.UInt64</td><td>ListingID: the unique listing id in user's storefront. <br>You can get the listingId by querying the marketplace</td></tr></tbody></table>

#### Transaction code example:

```typescript
import txUserCancelListing from "@fixes/contracts/transactions/marketplace/user-cancel-listing.cdc?raw";

async function userCancelListing(
  listingId: string
) {
  const txid = await flow.sendTransaction(txUserCancelListing, (arg, t) => [
    arg(listingId, t.UInt64),
  ]);
  return txid;
}
```

#### Transaction source code

{% @github-files/github-code-block url="<https://github.com/fixes-world/fixes/blob/main/cadence/transactions/marketplace/user-cancel-listing.cdc>" %}

#### Related docs

* [On-chain Interactions](/developer/on-chain-interactions#how-to-send-a-transaction-to-flow-blockchain-or-query-data-from-flow-blockchain)


# Fixes Inscription

This document is for developers who wish to extend the Fixes Inscription protocol.

:construction\_site: WIP

#### Here are the articles in this section

<table data-card-size="large" data-view="cards"><thead><tr><th data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/wPdFI3WumYINkdNlck5q">/pages/wPdFI3WumYINkdNlck5q</a></td></tr></tbody></table>


# EstimateCost - read

Estimate current inscribing cost

#### Script parameters

<table><thead><tr><th width="130" align="center">Key</th><th width="108" data-type="checkbox">Required</th><th width="100" align="center">FType</th><th>Description</th></tr></thead><tbody><tr><td align="center">mimeType</td><td>true</td><td align="center">t.String</td><td>for  𝔉rc20 use "text/plain"</td></tr><tr><td align="center">data</td><td>true</td><td align="center">t.String</td><td>the data string of each inscription</td></tr><tr><td align="center">protocol</td><td>true</td><td align="center">t.String</td><td>for 𝔉rc20 use "frc20"</td></tr></tbody></table>

#### Code example

```typescript
import scEstimateCost from "@fixes/contracts/scripts/estimate-cost.cdc?raw";

async function estimateInscriptionCost(data: string) {
  return await flowSrv.executeScript(
      scEstimateCost,
      (arg, t) => [
        arg("text/plain", t.String),
        arg(data, t.String),
        arg("frc20", t.String),
      ],
      "0.001"
    );
}
```

#### Script source code

{% @github-files/github-code-block url="<https://github.com/fixes-world/fixes/blob/main/cadence/scripts/estimate-cost.cdc>" %}


# Open API Service

Welcome to 𝔉rc20 Developer Service documentation

{% hint style="info" %} <mark style="color:green;">Please read</mark> [FIXeS Open API Service Legal Disclaimer](/developer/open-api-service/legal-disclaimer) <mark style="color:green;">before using FIXeS Open API Service.</mark>
{% endhint %}

## Overview

FIXeS Open API Service is open to community developers, allowing you to explore the world of FIXeS executable inscription. You can deploy your own inscribing services, bulid wallet applications, develop browsers, and much more using this API.

## Getting an API Key

To use the FIXeS Open API Service, please request an `API_KEY` from us by sending an email to <fixesonflow@gmail.com> with the name and description of your project and the reason for using it. After we review it, we will send you the `API_KEY`.

When you obtain the API key, please add it to the request header with the `Authorization` format as follows:

```bash
curl --location 'http://open-api.fixes.world/v1/utils/flow-price' \
--header 'Authorization: Bearer YOUR_API_KEY'
```


# 𝔉rc20 Basics

{% content-ref url="/pages/14v01mC3lyKSFivP20dd" %}
[Query 𝔉rc20 Tokens](/developer/open-api-service/rc20-basics/query-rc20-tokens)
{% endcontent-ref %}

{% content-ref url="/pages/Z2aJVGheRd2iZw1qqlm0" %}
[Fetch 𝔉rc20 Token Info](/developer/open-api-service/rc20-basics/fetch-rc20-token-info)
{% endcontent-ref %}

{% content-ref url="/pages/aP0DX7uia5bmg90MgEFb" %}
[Check 𝔉rc20 registered](/developer/open-api-service/rc20-basics/check-rc20-registered)
{% endcontent-ref %}

{% content-ref url="/pages/ncB2gM7yk9XLHT7WoAst" %}
[Get 𝔉rc20 balances](/developer/open-api-service/rc20-basics/get-rc20-balances)
{% endcontent-ref %}

{% content-ref url="/pages/ENAlOA5OJau3aikzxTue" %}
[Get 𝔉rc20 balance](/developer/open-api-service/rc20-basics/get-rc20-balance)
{% endcontent-ref %}


# Query 𝔉rc20 Tokens

## Get the list of all 𝔉rc20 FTs

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/frc20?page=0&limit=30`

#### Query Parameters

| Name  | Type   | Description                           |
| ----- | ------ | ------------------------------------- |
| page  | Number | Start page, default 0                 |
| limit | Number | Number of results returned, Up to 100 |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK List of 𝔉rc20 TokenMeta" %}

```json
{
  "list": [
    {
      "tick": "flows",
      "max": 21000000,
      "limit": 100,
      "deployedAt": 1703304138,
      "deployer": "0xa2de93114bae3e73",
      "burnable": false,
      "supplied": 21000000,
      "burned": 0,
      "holders": 2054,
      "poolBalance": 21198.97441412,
      "stakable": true,
      "stakingAddr": "0x17c758477024fa07",
      "marketEnabled": true,
      "isVerified": true
    },
    {
      "tick": "wolf",
      "max": 1000000,
      "limit": 1000,
      "deployedAt": 1703340393,
      "deployer": "0xb9bb9404767cd896",
      "burnable": true,
      "supplied": 1000000,
      "burned": 1000,
      "holders": 126,
      "poolBalance": 199.38704598,
      "stakable": false,
      "stakingAddr": null,
      "marketEnabled": false,
      "isVerified": false
    }
  ]
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}
{% endtabs %}


# Fetch 𝔉rc20 Token Info

## Get the token info of a 𝔉rc20 FT

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/frc20/:tick`

#### Path Parameters

| Name                                   | Type   | Description                     |
| -------------------------------------- | ------ | ------------------------------- |
| tick<mark style="color:red;">\*</mark> | String | The ticker name of 𝔉rc20 Token |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK Object of 𝔉rc20 TokenMeta" %}

```json
{
    "tick": "flows",
    "max": 21000000,
    "limit": 100,
    "deployedAt": 1703304138,
    "deployer": "0xa2de93114bae3e73",
    "burnable": false,
    "supplied": 21000000,
    "burned": 0,
    "holders": 2054,
    "poolBalance": 21198.97441412,
    "stakable": true,
    "stakingAddr": "0x17c758477024fa07",
    "marketEnabled": true,
    "isVerified": true
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}

{% tab title="400: Bad Request Missing ticker" %}

{% endtab %}

{% tab title="404: Not Found Ticker not found" %}

{% endtab %}
{% endtabs %}


# Check 𝔉rc20 registered

## Check if the 𝔉rc20 token has been registered

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/frc20/:tick/check-registered`

#### Path Parameters

| Name                                   | Type   | Description                     |
| -------------------------------------- | ------ | ------------------------------- |
| tick<mark style="color:red;">\*</mark> | String | The ticker name of 𝔉rc20 Token |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK Example Response" %}

```json
{
    "tick": "flows",
    "registered": true
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}

{% tab title="400: Bad Request Missing ticker" %}

{% endtab %}
{% endtabs %}


# Get 𝔉rc20 balances

## Get the 𝔉rc20 balances of the given address

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/address/:address/frc20/balances?includeFlow=1`

#### Path Parameters

| Name                                      | Type   | Description                    |
| ----------------------------------------- | ------ | ------------------------------ |
| address<mark style="color:red;">\*</mark> | String | the given address for querying |

#### Query Parameters

| Name        | Type | Description                                                      |
| ----------- | ---- | ---------------------------------------------------------------- |
| includeFlow |      | If including Flow Token Balance, "0" means false, "1" means true |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK 𝔉rc20 balances ("tick"="" means FlowToken)" %}

```json
{
    "address": "0xa2de93114bae3e73",
    "tokens": [
        {
            "tick": "flows",
            "amount": 10.99295469
        },
        {
            "tick": "",
            "amount": 6.67809801
        },
        {
            "tick": "fixes",
            "amount": 1000.00000000
        }
    ]
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}

{% tab title="400: Bad Request Invalid address" %}

{% endtab %}
{% endtabs %}


# Get 𝔉rc20 balance

## Get the 𝔉rc20 balance of the given address and given ticker name

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/address/:address/frc20/balances/:tick`

#### Path Parameters

| Name                                      | Type   | Description                    |
| ----------------------------------------- | ------ | ------------------------------ |
| address<mark style="color:red;">\*</mark> | String | the given address for querying |
| tick<mark style="color:red;">\*</mark>    | String | the given ticker name          |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK 𝔉rc20 balance" %}

```json
{
    "tick": "flows",
    "amount": 10.0
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}

{% tab title="400: Bad Request Invalid address / ticker name" %}

{% endtab %}
{% endtabs %}


# 𝔉rc20 Marketplace

{% content-ref url="/pages/6J4cxIPFmsrnGgnusXS9" %}
[Query all 𝔉rc20 Markets](/developer/open-api-service/rc20-marketplace/query-all-rc20-markets)
{% endcontent-ref %}

{% content-ref url="/pages/RGSv5eOc5K4DXTBW3Hpk" %}
[Fetch 𝔉rc20 Market detailed info](/developer/open-api-service/rc20-marketplace/fetch-rc20-market-detailed-info)
{% endcontent-ref %}

{% content-ref url="/pages/7xgXXHcYAuq2LbnQxnpt" %}
[Check 𝔉rc20 Market enabled](/developer/open-api-service/rc20-marketplace/check-rc20-market-enabled)
{% endcontent-ref %}

{% content-ref url="/pages/TW0sL0eNqCSUyHyHYZlf" %}
[Query 𝔉rc20 Listings](/developer/open-api-service/rc20-marketplace/query-rc20-listings)
{% endcontent-ref %}

{% content-ref url="/pages/DxBj7IcQiKMyB1XDvkEP" %}
[Query Market Trading History](/developer/open-api-service/rc20-marketplace/query-market-trading-history)
{% endcontent-ref %}

{% content-ref url="/pages/WDRUBKI6wG3DiLyIgY8Y" %}
[Query Address Trading History](/developer/open-api-service/rc20-marketplace/query-address-trading-history)
{% endcontent-ref %}


# Query all 𝔉rc20 Markets

## Get the list of all enabled 𝔉rc20 Markets

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/market`

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK List of 𝔉rc20 Market Basics Info" %}

```json
{
    "list": [
        {
            "meta": {
                "tick": "flows",
                "max": 21000000,
                "limit": 100,
                "deployedAt": 1703304138,
                "deployer": "0xa2de93114bae3e73",
                "burnable": false,
                "supplied": 21000000,
                "burned": 0,
                "holders": 2054,
                "poolBalance": 21203.88198416,
                "stakable": true,
                "stakingAddr": "0x17c758477024fa07",
                "marketEnabled": true,
                "isVerified": true
            },
            "volume24h": 378.2499985,
            "sales24h": 4,
            "volumeTotal": 47528.59118265,
            "salesTotal": 714,
            "listedAmount": 109,
            "address": "0xf3a0e19a61defad8"
        },
        {
            "meta": {
                "tick": "worthless",
                "max": 1000000000,
                "limit": 1000000000,
                "deployedAt": 1703990279,
                "deployer": "0xa2de93114bae3e73",
                "burnable": true,
                "supplied": 1000000000,
                "burned": 0,
                "holders": 38,
                "poolBalance": 2.945504,
                "stakable": false,
                "stakingAddr": null,
                "marketEnabled": true,
                "isVerified": true
            },
            "volume24h": 0,
            "sales24h": 0,
            "volumeTotal": 0.918,
            "salesTotal": 4,
            "listedAmount": 6,
            "address": "0x06ef9007881b9df0"
        },
        {
            "meta": {
                "tick": "bitcoin",
                "max": 1000,
                "limit": 2,
                "deployedAt": 1703341136,
                "deployer": "0xeb2d335e7b187a36",
                "burnable": false,
                "supplied": 306,
                "burned": 0,
                "holders": 51,
                "poolBalance": 29.02231,
                "stakable": false,
                "stakingAddr": null,
                "marketEnabled": true,
                "isVerified": false
            },
            "volume24h": 0,
            "sales24h": 0,
            "volumeTotal": 0,
            "salesTotal": 0,
            "listedAmount": 7,
            "address": "0x5efead6d46ec7ec5"
        },
        {
            "meta": {
                "tick": "dragon",
                "max": 21000,
                "limit": 100,
                "deployedAt": 1703341943,
                "deployer": "0x13738c03539ee51d",
                "burnable": false,
                "supplied": 21000,
                "burned": 0,
                "holders": 45,
                "poolBalance": 9.72857,
                "stakable": false,
                "stakingAddr": null,
                "marketEnabled": true,
                "isVerified": false
            },
            "volume24h": 0,
            "sales24h": 0,
            "volumeTotal": 0,
            "salesTotal": 0,
            "listedAmount": 2,
            "address": "0xee62937672b3090f"
        }
    ]
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}
{% endtabs %}


# Fetch 𝔉rc20 Market detailed info

## Fetch the detailed 𝔉rc20 Market info of the given tick

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/market/:tick`

#### Path Parameters

| Name                                   | Type   | Description                     |
| -------------------------------------- | ------ | ------------------------------- |
| tick<mark style="color:red;">\*</mark> | String | The ticker name of 𝔉rc20 Token |

#### Query Parameters

| Name    | Type   | Description                                                                                        |
| ------- | ------ | -------------------------------------------------------------------------------------------------- |
| address | String | Optionally, add a address in the query, to check whether there are some permissions for the market |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK 𝔉rc20 Market Detailed Info" %}

```json
{
    "meta": {
        "tick": "flows",
        "max": 21000000,
        "limit": 100,
        "deployedAt": 1703304138,
        "deployer": "0xa2de93114bae3e73",
        "burnable": false,
        "supplied": 21000000,
        "burned": 0,
        "holders": 2054,
        "poolBalance": 21203.88198416,
        "stakable": true,
        "stakingAddr": "0x17c758477024fa07",
        "marketEnabled": true,
        "isVerified": true
    },
    "volume24h": 378.2499985,
    "sales24h": 4,
    "volumeTotal": 47528.59118265,
    "salesTotal": 714,
    "listedAmount": 109,
    "address": "0xf3a0e19a61defad8",
    "floorPriceBuyListing": 0.0089,
    "ceilingPriceSellListing": 0.008,
    "floorPriceDeal": 0.000025,
    "ceilingPriceDeal": 40500,
    "accessible": true,
    "isValidToClaimAccess": false
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}

{% tab title="404: Not Found Not found" %}

{% endtab %}
{% endtabs %}


# Check 𝔉rc20 Market enabled

Marketenabled

## Check if the 𝔉rc20 market has been enabled

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/market/:tick/check-enabled`

#### Path Parameters

| Name                                   | Type   | Description                     |
| -------------------------------------- | ------ | ------------------------------- |
| tick<mark style="color:red;">\*</mark> | String | The ticker name of 𝔉rc20 Token |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK Example Response" %}

```json
{
    "tick": "flows",
    "marketEnabled": true
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}

{% tab title="400: Bad Request Missing ticker" %}

{% endtab %}
{% endtabs %}


# Query 𝔉rc20 Listings

## Get the list of 𝔉rc20 trading listings in the given market

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/market/:tick/listings?type=0&limit=25&startPriceRank=&startPriceRankIdx=`

#### Path Parameters

| Name                                   | Type   | Description                     |
| -------------------------------------- | ------ | ------------------------------- |
| tick<mark style="color:red;">\*</mark> | String | The ticker name of 𝔉rc20 Token |

#### Query Parameters

| Name              | Type       | Description                                                                                                                                       |
| ----------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| type              | "0" \| "1" | The listing type, "0" means orders for sale (You can display as buyNow), "1" means orders for purchase (You can display as sellNow), Default: “0” |
| limit             | Number     | Number of results returned, Up to 100                                                                                                             |
| startPriceRank    | Number     | Query start from the given **priceRank**, you can get the priceRank in the previous response. Default: undefined                                  |
| startPriceRankIdx | Number     | Query start from the given **priceRankIdx**, you can get the rankedIdx in the previous response. Default: undefined                               |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK List of Listing Orders" %}

```json
{
    "list": [
        {
            "type": 0,
            "priceRank": 890,
            "rankedIdx": 0,
            "itemInMarket": {
                "rankedId": "0-890-1472995729",
                "storefront": "0x936c354755d0b2d9",
                "listingId": "1472995729",
                "timestamp": 1707068329
            },
            "details": {
                "storefrontId": "1440492416",
                "inscriptionId": "1398851",
                "type": 0,
                "tick": "flows",
                "amount": 5000,
                "transactedAmount": 0,
                "totalPrice": 44.5,
                "priceValuePerMint": 0.89,
                "createdAt": 1707068329,
                "status": 0,
                "customID": null
            }
        },
        {
            "type": 0,
            "priceRank": 899,
            "rankedIdx": 0,
            "itemInMarket": {
                "rankedId": "0-899-1456703409",
                "storefront": "0xcf214661ef31cbe2",
                "listingId": "1456703409",
                "timestamp": 1706192323
            },
            "details": {
                "storefrontId": "1456703406",
                "inscriptionId": "1133689",
                "type": 0,
                "tick": "flows",
                "amount": 69000,
                "transactedAmount": 8511,
                "totalPrice": 621,
                "priceValuePerMint": 0.9,
                "createdAt": 1706192323,
                "status": 0,
                "customID": null
            }
        },
        {
            "type": 0,
            "priceRank": 930,
            "rankedIdx": 0,
            "itemInMarket": {
                "rankedId": "0-930-1466118910",
                "storefront": "0x936c354755d0b2d9",
                "listingId": "1466118910",
                "timestamp": 1706685218
            },
            "details": {
                "storefrontId": "1440492416",
                "inscriptionId": "1305790",
                "type": 0,
                "tick": "flows",
                "amount": 4000,
                "transactedAmount": 0,
                "totalPrice": 37.2,
                "priceValuePerMint": 0.93,
                "createdAt": 1706685218,
                "status": 0,
                "customID": null
            }
        }
    ]
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}

{% tab title="400: Bad Request Missing ticker name" %}

{% endtab %}
{% endtabs %}


# Query Market Trading History

## Get the trading histories of the given 𝔉rc20 market

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/market/:tick/trading-activites?page=0&limit=25&datetime=`

#### Path Parameters

| Name | Type   | Description                     |
| ---- | ------ | ------------------------------- |
| tick | String | The ticker name of 𝔉rc20 Token |

#### Query Parameters

| Name     | Type   | Description                                       |
| -------- | ------ | ------------------------------------------------- |
| page     | Number | Start page, default 0                             |
| limit    | Number | Number of results returned, Up to 100             |
| datetime | Number | Timestamp(ms) of the date for the trading history |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK List of 𝔉rc20 Trading Histories" %}

```json
{
    "list": [
        {
            "storefront": "0x6de227e6a9c57fdf",
            "buyer": "0x4608754a0c163332",
            "seller": "0x6de227e6a9c57fdf",
            "tick": "flows",
            "dealAmount": 16900,
            "dealPrice": 143.64999884,
            "dealPricePerMint": 0.84999859,
            "timestamp": 1707271860
        },
        {
            "storefront": "0x72572338b801e425",
            "buyer": "0x4608754a0c163332",
            "seller": "0x72572338b801e425",
            "tick": "flows",
            "dealAmount": 10000,
            "dealPrice": 84,
            "dealPricePerMint": 0.84,
            "timestamp": 1707271831
        },
        {
            "storefront": "0x837849d8d1e38f6e",
            "buyer": "0x4608754a0c163332",
            "seller": "0x837849d8d1e38f6e",
            "tick": "flows",
            "dealAmount": 12000,
            "dealPrice": 100.79999966,
            "dealPricePerMint": 0.83999966,
            "timestamp": 1707271806
        },
        {
            "storefront": "0xecb50f2955d00a5c",
            "buyer": "0x4608754a0c163332",
            "seller": "0xecb50f2955d00a5c",
            "tick": "flows",
            "dealAmount": 6000,
            "dealPrice": 49.8,
            "dealPricePerMint": 0.82999966,
            "timestamp": 1707271778
        },
        {
            "storefront": "0x36684bae2906081a",
            "buyer": "0x36684bae2906081a",
            "seller": "0xe5cb1a35821237c7",
            "tick": "flows",
            "dealAmount": 1500,
            "dealPrice": 10.65,
            "dealPricePerMint": 0.70999992,
            "timestamp": 1707203042
        },
        {
            "storefront": "0xecb50f2955d00a5c",
            "buyer": "0xecb50f2955d00a5c",
            "seller": "0xe5cb1a35821237c7",
            "tick": "flows",
            "dealAmount": 3000,
            "dealPrice": 22.5,
            "dealPricePerMint": 0.74999992,
            "timestamp": 1707202630
        },
        {
            "storefront": "0x837849d8d1e38f6e",
            "buyer": "0xa2de93114bae3e73",
            "seller": "0x837849d8d1e38f6e",
            "tick": "flows",
            "dealAmount": 1000,
            "dealPrice": 8.39999924,
            "dealPricePerMint": 0.83999992,
            "timestamp": 1707187320
        }
    ]
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}

{% tab title="400: Bad Request Missing ticker name" %}

{% endtab %}
{% endtabs %}


# Query Address Trading History

## Get the trading histories of the given address

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/address/:address/frc20/trading-activities?page=0&limit=25&datetime=`

#### Path Parameters

| Name    | Type   | Description                    |
| ------- | ------ | ------------------------------ |
| address | String | the given address for querying |

#### Query Parameters

| Name     | Type   | Description                                       |
| -------- | ------ | ------------------------------------------------- |
| page     | Number | Start page, default 0                             |
| limit    | Number | Number of results returned, Up to 100             |
| datetime | Number | Timestamp(ms) of the date for the trading history |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK List of 𝔉rc20 Trading Histories" %}

```json
{
    "list": [
        {
            "storefront": "0x6de227e6a9c57fdf",
            "buyer": "0x4608754a0c163332",
            "seller": "0x6de227e6a9c57fdf",
            "tick": "flows",
            "dealAmount": 16900,
            "dealPrice": 143.64999884,
            "dealPricePerMint": 0.84999859,
            "timestamp": 1707271860
        },
        {
            "storefront": "0x72572338b801e425",
            "buyer": "0x4608754a0c163332",
            "seller": "0x72572338b801e425",
            "tick": "flows",
            "dealAmount": 10000,
            "dealPrice": 84,
            "dealPricePerMint": 0.84,
            "timestamp": 1707271831
        },
        {
            "storefront": "0x837849d8d1e38f6e",
            "buyer": "0x4608754a0c163332",
            "seller": "0x837849d8d1e38f6e",
            "tick": "flows",
            "dealAmount": 12000,
            "dealPrice": 100.79999966,
            "dealPricePerMint": 0.83999966,
            "timestamp": 1707271806
        },
        {
            "storefront": "0xecb50f2955d00a5c",
            "buyer": "0x4608754a0c163332",
            "seller": "0xecb50f2955d00a5c",
            "tick": "flows",
            "dealAmount": 6000,
            "dealPrice": 49.8,
            "dealPricePerMint": 0.82999966,
            "timestamp": 1707271778
        }
    ]
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}

{% tab title="400: Bad Request Missing ticker name" %}

{% endtab %}
{% endtabs %}


# Utilities

{% content-ref url="/pages/bQdx9lrmRLICiaOEWhZp" %}
[Estimate Fixes inscribing cost](/developer/open-api-service/utilities/estimate-fixes-inscribing-cost)
{% endcontent-ref %}

{% content-ref url="/pages/BUqVP8MwcN3dOg0upGku" %}
[Get current $FLOW price](/developer/open-api-service/utilities/get-current-usdflow-price)
{% endcontent-ref %}


# Estimate Fixes inscribing cost

## Estimate the $flow cost for inscribing a new Fixes Inscription

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/utils/estimate-cost?text=text-to-inscribe`

#### Query Parameters

| Name | Type   | Description                                                                   |
| ---- | ------ | ----------------------------------------------------------------------------- |
| text | String | The string to inscribe, remember to encodeURIComponent before pass to the API |

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK The estimated cost of the given text string" %}

```json
{
    "text": "abcd",
    "cost": 0.2099
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}
{% endtabs %}


# Get current $FLOW price

## Get current $FLOW price (In USD, using IncrementFi price oracle)&#x20;

<mark style="color:blue;">`GET`</mark> `http://open-api.fixes.world/v1/utils/estimate-cost?text=text-to-inscribe`

#### Headers

| Name                                            | Type   | Description           |
| ----------------------------------------------- | ------ | --------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer YOUR\_API\_KEY |

{% tabs %}
{% tab title="200: OK price result" %}

```json
{
    "price": 0.73390062
}
```

{% endtab %}

{% tab title="401: Unauthorized Unauthorized" %}

{% endtab %}
{% endtabs %}


# Legal Disclaimer

Read this first before using the application programming interface (“API”) service from FIXeS Protocol.

### Part 1: Technical and Infrastructure Terms

1. FIXeS API Data Query Service: The API data query service provided by FIXeS (the “API Service”) is free to use and aims to provide more information to the community. Please note that the API Service is not a commercial service, and FIXeS is not responsible for any consequences of its use.&#x20;
2. Fees: The API Service is currently provided for free, but FIXeS reserves the right to charge for using the API Service in the future.
3. Availability and Reliability of the API Service: FIXeS does not guarantee the availability and reliability of the API service to API users. Users need to assess the risks associated with using the API and bear any resulting faults, issues, risks, and losses.&#x20;
4. Service Changes and Termination: FIXeS reserves the right to modify or terminate the API Service at any time at its sole discretion without prior notice. FIXeS is not responsible for any losses or inconveniences resulting from such actions.&#x20;
5. Data Accuracy: FIXeS does not guarantee that the information returned by the API is accurate, timely, complete, valid, or error-free. FIXeS is not responsible for any losses caused by inaccuracies, delay or data errors resulting from using the API Service.&#x20;
6. Technical Compatibility: FIXeS is not responsible for the incompatibility of the API with any devices, platforms, browsers, services, software or hardware. Users must ensure that their technical environment is compatible with the API Service.&#x20;
7. Third-Party Content and Links: The API Service may contain content or links from third parties, solely as a convenience. Such third-party content or links are not under the control of FIXeS and FIXeS is not responsible for the quality, accuracy, completeness, performance or reliability of this content, nor for any losses incurred by users using third-party content or accessing third-party links through the API. The fact that such content or links may be included in, provided by, or accessed through the API Service does not imply endorsement by FIXeS or the third party of either party’s sites or services. Depending on users’ jurisdiction, some third-party content may not be available to users.&#x20;
8. Emergency Maintenance: FIXeS has the right to perform emergency maintenance on the API Service at any time at its sole discretion, which may result in temporary service interruptions or suspensions. FIXeS is not responsible for any losses or inconveniences caused by this. Nothing herein shall be construed as an obligation for FIXeS to maintain or provide technical support of any kind for the API Service.

### Part 2: User, Anti-Spam, and Privacy Terms

1. Security Assurance: Users understand and agree that FIXeS has implemented reasonable security measures to protect the security of the API Service. However, FIXeS is not responsible for any losses or damages caused by unauthorized access, data leaks, or other security vulnerabilities. Accordingly, without limitation to any other provisions of this disclaimer, users acknowledge that users bear the sole responsibility for adequate security, protection and backup of any data, software programs or services in connection with users’ use of the API Service.
2. Usage Restrictions: FIXeS reserves the right to restrict, suspend, or terminate users' access to the API Service at its sole discretion without prior notice. This may be based on users' violations, misuse of the API Service, or other reasons FIXeS deems reasonable. FIXeS is not responsible for any loss or damage whatsoever arising from or in connection with the exercise of such rights.&#x20;
3. No Illegal Use: Users must not use the API Service in any way or for any purpose that is illegal, for sending spam or any other activity that violates the relevant regulations and policies that apply to users, to upload or transmit any information or software which contains any computer viruses, worms, Trojan horses or any other intrusive or harmful computer codes, programs or files;  to access, use, break into, or attempt to access, use or break into any parts of the API Service which the user has not been authorized to use; and in any way that contravenes or infringes upon FIXeS’s rights or the rights of any third party. The decision of FIXeS as to what constitutes such activities are final and conclusive. FIXeS is not responsible for any legal liabilities resulting from users' violations.
4. User Information: FIXeS will use reasonable commercial endeavors to protect users' personal information in accordance with the relevant regulations and policies that apply to FIXeS, but is not responsible for losses resulting from unauthorized access, data leaks, or other data security issues. Users understand that the personal information provided during the use of the API Service may be collected and processed.

### Part 3. Business Applications, Legal, and Other Terms

1. Non-Commercial Use: FIXeS explicitly states that the API Service is for non-commercial purposes only. Any commercial use of the API Service, including but not limited to selling, sublicensing, or engaging in other commercial activities, requires the prior written permission from FIXeS.&#x20;
2. Mandatory Interpretation: The interpretation and application of this disclaimer are subject to applicable laws and will be interpreted within the limits required by law.&#x20;
3. Disclaimer Updates: FIXeS reserves the right to modify this disclaimer at any time and reminds users to regularly check for changes. If users do not agree to the modifications, then users must immediately stop using the API Service. If users do not stop using the API Service, then users’ use of the API Service will continue under the changed agreement.&#x20;
4. Indemnification: Users will indemnify, pay the defense costs of, and hold FIXeS and its successors, officers, directors and employees harmless from and against any and all claims, demands, costs, liabilities, judgments, losses, expenses and damages (including attorneys’/legal fees) arising out of, in connection with, or related to users’ use of the API Service in breach of its term of use or in violation of any applicable laws or regulations, or any data, software programs or services that users use in connection with the API Service, including without limitation any claim that such data, software program or services, or any part thereof, infringes, misappropriates, or otherwise violates any copyright, patent, trade secret, trademark, or other legal right of any third party.&#x20;
5. No Warranty: WE PROVIDE, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, THE API SERVICE AND SUPPORT SERVICES (IF ANY) “AS IS,” “WITH ALL FAULTS” AND “AS AVAILABLE,” AND THE ENTIRE RISK AS TO SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AVAILABILITY OF DATA FROM THE API SERVICE, AND EFFORT IS WITH USERS. FIXeS, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, MAKES NO REPRESENTATIONS, WARRANTIES, GUARANTEES OR CONDITIONS WITH RESPECT TO THE API SERVICE OR SUPPORT SERVICES (IF ANY). TO THE EXTENT PERMITTED UNDER APPLICABLE LAW, FIXeS DISCLAIMS AND EXCLUDES ANY AND ALL REPRESENTATIONS, WARRANTIES, GUARANTEES OR CONDITIONS, EXPRESS, STATUTORY AND IMPLIED; INCLUDING WITHOUT LIMITATION REPRESENTATIONS, WARRANTIES, GUARANTEES OR CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, WORKMANLIKE EFFORT, ACCURACY, QUIET ENJOYMENT, AND NON-INFRINGEMENT, REPRESENTATIONS, WARRANTIES, GUARANTEES OR CONDITIONS ARISING THROUGH COURSE OF DEALING OR USAGE OF TRADE, AND REPRESENTATIONS, WARRANTIES, GUARANTEES OR CONDITIONS THAT ACCESS TO OR USE OF THE API SERVICE WILL FUNCTION AS DESCRIBED, WILL BE UNINTERRUPTED, ERROR-FREE, OR SECURE OR THAT USERS’ USE OF THE API SERVICE WILL BE RELIABLE AND ACCURATE, INCLUDING WITHOUT LIMITATION STORING, READING, UPDATING OR DELETING ANY DATA. NO ORAL OR WRITTEN STATEMENT MADE TO USERS IN THE CONTEXT OF PROVIDING THE API SERVICE OR SUPPORT SERVICES (IF ANY) WILL CREATE ANY WARRANTY THAT HAS BEEN EXPRESSLY DISCLAIMED IN THIS DISCLAIMER.&#x20;
6. Limitation of Liability: TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL FIXeS HAVE ANY LIABILITY ARISING OUT OF, BASED ON, OR RESULTING FROM THIS DISCLAIMER OR USERS’ USE OF THE API SERVICE OR SUPPORT SERVICES (IF ANY), FOR ANY INDIRECT, CONSEQUENTIAL, SPECIAL, INCIDENTAL, EXEMPLARY, OR PUNITIVE DAMAGES, DAMAGES FOR LOST PROFITS, LOSS OF INFORMATION, LOSS OF USE, DAMAGE TO OR LOSS OF GOODWILL, USE OR INABILITY TO USE THE API SERVICE OR SUPPORT SERVICES (IF ANY); COST OF PROCUREMENT OF SUBSTITUTE GOODS, DATA, SOFTWARE PROGRAMS OR SERVICES; UNAUTHORIZED ACCESS TO OR USE OF, OR ANY ALTERATION, CORRUPTION, DELETION, DAMAGE OR LOSS OF, THE DATA GENERATED BY THE API SERVICE, OR ANY OTHER DATA, SOFTWARE PROGRAMS OR SERVICES USED IN CONNECTION WITH THE API SERVICE; FAILURE TO PROVIDE ACCURATE INFORMATION; VIRUSES OR OTHER DISABLING FEATURES THAT AFFECT USERS’ ACCESS OR USE OF THE API SERVICE OR THAT ARE TRANSFERRED TO USERS THROUGH THE API SERVICE; INCOMPATIBILITIES BETWEEN THE API SERVICE AND OTHER SERVICES, SOFTWARE OR HARDWARE; AND/OR ANY THIRD PARTY CONDUCT, TRANSMISSIONS OR DATA. THESE LIMITATIONS APPLY REGARDLESS OF WHETHER THE LIABILITY IS BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY, BREACH OF WARRANTIES, OR OTHER LEGAL THEORY, AND EVEN IF THIS REMEDY DOES NOT FULLY COMPENSATE USERS FOR ANY LOSSES, OR FAILS OF ITS ESSENTIAL PURPOSE AND/OR FIXeS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&#x20;
7. Intellectual Property: Users understand and agree not to infringe on any intellectual property related to FIXeS.&#x20;
8. Applicable Law and Dispute Resolution: This disclaimer is subject to applicable law, and any disputes arising from the use of the API should be resolved through arbitration or other suitable means.&#x20;
9. Clarity of Disclaimer: Users understand and agree that even if certain terms are invalid in legal terms, the remaining terms of this disclaimer remain valid. A court may hold that we cannot enforce a part of this disclaimer as written. If this happens, then users and us will replace that part with terms that most closely match the intent of the part that we cannot enforce. The rest of this disclaimer will not change. This disclaimer, including any other policies or terms incorporated by reference, is the entire agreement between users and us regarding users’ use of the API Service. It supersedes any prior agreements or statements (whether oral or written) regarding users’ use of the API Service.&#x20;
10. Assignment: We may assign this agreement, in whole or in part, at any time with or without notice to users. Users may not assign this agreement, or any part of it, to any other third party. Any attempt by users to do so is void. Users may not transfer to a third party, either temporarily or permanently, any rights to use the API Service or any part of them.&#x20;
11. No Third Party Beneficiaries: This agreement is solely for users’ and our benefit. It is not for the benefit of any other party, except for permitted successors and assigns under this agreement.&#x20;
12. No Waiver: Any delay or failure by FIXeS to exercise a right or remedy will not result in a waiver of that, or any other, right or remedy.


