Introduction

This document describes the process for listing a new ("crypto") asset on the Bisq exchange. Anyone with sufficient technical skills to follow the instructions below can list an asset.

Fees to list an asset depend on its trading volume. New assets require fees be paid to appear in Bisq.

Please note: Bisq will not list your token if it has taken part in an initial coin offering (ICO). Given the uncertain regulatory treatment of such tokens, Bisq stakeholders determined they are currently too much of a legal risk for the project.

Also note that Bisq does not implement any technical infrastructure for listed assets, such as wallets, full nodes, block explorers, etc. Rather, Bisq simply supports users adding an address for any listed asset as a payment account that can be used to settle trades for bitcoin. The process of sending and receiving such asset payments, like the process of sending and receiving fiat payments, is not an integrated part of the Bisq application; traders must use their own wallet software to perform actual transfers for such assets.

This document replaces the earlier process description in the Bisq forum and the earlier document at https://bisq.network/list-token.

There are 2 ways to submit a new asset to be listed on Bisq: create an issue or make a pull request. We detail both processes below, but note that prerequisites are identical for both.

Prerequisites

The asset must have an official block explorer

The asset must have an active, publicly available block explorer.

The asset ticker symbol must not conflict with national currency tickers

The ticker symbol must not conflict with one of the national currency ISO 4217 ticker symbols listed at https://en.wikipedia.org/wiki/ISO_4217.

The asset ticker symbol must not conflict with other asset ticker symbols

The ticker symbol must not conflict with one of the top 100 cryptocurrency / crypto-asset ticker symbols listed at: https://coinmarketcap.com/currencies at the time of PR creation.

The asset must not impose additional technical requirements

Be sure that the requirements to add the asset do not cause extra effort for Bisq maintainers, e.g. requiring additional input fields because the address alone is not sufficient for a trade.

Arbitrators must be able to look up transactions in the asset block explorer

A Bisq arbitrator must be able to look up transactions in the asset’s block explorer by using the receiver’s address. In case that is not possible as a result of enhanced privacy features e.g. in Zcash, Monero and CryptoNote coins, a suggested solution needs to be added to the asset listing pull request (e.g. in Zcash we support only transparent addresses not z-addresses; in Monero we require that the user is using a Monero wallet which supports transaction keys to enable 3rd party audits of the transaction which is used in case of a dispute). As such additional cases require additional effort (popup with background info) it will be up to Bisq contributors whether to add a pull request for the popup and translation strings. Of course the code or the popup can be part of the PR as well but a more detailed description is out of scope of this document.

Method #1: Create an Issue

If your asset meets the prerequisites listed above, you may open a new issue in the bisq-network/bisq repository using this link:

You must use the link above to create the issue, as it links to a template designed specifically for new asset requests.

Creating an issue to list a new asset is not a guarantee that your asset will be listed. It’s a request to convince a Bisq developer to spend the time needed to implement the new asset, write tests, etc. You can help by making a request that is complete and well-formed, and by being cooperative throughout the process. Bisq is always short with devs. Offering a bounty is a good idea to help your asset being listed.

If you have the resources to make a pull request yourself, you are welcome to do so by following the directions below.

Method #2: Make a Pull Request

Each of the steps described below deals with code in the assets directory of the https://github.com/bisq-network/bisq repository. You will need to fork this repository, make the specified changes, and then submit those changes as a SINGLE COMMIT within a SINGLE PULL REQUEST. Please DO NOT issue several pull requests by attempting to modify the sources one by one via the GitHub web UI. You need to have a competent developer make these changes and actually run the tests. To be extra clear: If you are unfamiliar with Java, don’t know what a "pull request" is, or have never created a pull request yourself, please do not attempt to follow the instructions below on your own.

Step 1. Implement your asset

Asset Hierarchy
Figure 1. The bisq.asset.Asset type hierarchy

All assets listed on the Bisq exchange ultimately implement the bisq.asset.Asset interface. Your asset implementation will need to extend the Coin, Token or Erc20Token subtypes as appropriate.

Look through existing concrete Asset implementations for one most similar to yours and use it as a baseline.

Coin implementations must be located within the bisq.asset.coins package. Token implementations must be located within the bisq.asset.tokens package.

For example, if you are listing a new Coin named FooCoin, its fully-qualified name should be bisq.asset.coins.FooCoin.

Follow existing coding conventions. Everything from license headers to import statements to indentation and blank lines matters. Make your implementation look exactly like the other Asset implementations you see.

Step 2. Register your asset

Register your asset by adding an entry to the META-INF/services/bisq.asset.Asset provider-configuration file.

Entries in this file must be kept in alphabetical order.

Step 3. Write tests for your asset

Create a new AbstractAssetTest subclass for your asset, named e.g. FooCoinTest and implement the required methods as appropriate.

Again, look to existing AbstractAssetTest implementations for a baseline as to how your own should look.

Step 4. Compile and test everything

Run the following command and ensure you get a successful result.

./gradlew :assets:build
[...]
BUILD SUCCESSFUL

Step 5. Create a well-formed Git commit

Your changes should be squashed into a SINGLE GIT COMMIT with a commit message that reads as follows:

List [asset name] ([ticker symbol])

For example:

  • List Litecoin (LTC)

  • List Monero (XMR)

  • List Zcash (ZEC)

Your Git author metadata should include your full name (or nym) and email address. For example, this is what your commit metadata, a la git log should look like:

Author: Roger Pollack <mrslippery@protonmail.com>
Date:   Wed Aug 1 00:00:00 1979 -0800

    List OtherPlane (OTP)

Step 6. Submit your pull request

Your pull request should be submitted against the bisq-network/bisq repository’s master branch. Make sure you do this from a dedicated topic branch in your fork named, for example, list-foo-asset. Do not submit your pull request directly from your master branch, as this can make things unnecessarily complex if and when there are merge conflicts.

Copy and paste the form template below into the description of the pull request and fill it out.

- Official project URL: [url]
- Official block explorer URL: [url]
When submitting your pull request, please check the Allow edits from maintainers box. See https://github.com/bisq-network/style/issues/4 for details.

Fees

Assets listed on Bisq must maintain a minimum trading volume of 0.01 BTC. The time period for this volume requirement varies (details below). Those that don’t meet the threshold require an asset listing fee be paid to remain listed.

New assets start with zero volume, so they don’t meet the volume threshold to start, and an asset listing fee must be paid after they are included in a Bisq release.

The fee is 1 BSQ per day (the fee is a Bisq DAO parameter, so it is subject to change). The minimum fee is 30 BSQ (i.e., 30 days). The period paid for becomes the new rolling window over which the 0.01 BTC volume threshold applies.

Examples

Paying 30 BSQ results in an asset being listed for 30 days regardless of volume. Afterward, it must maintain 0.01 BTC of trading volume over subsequent rolling 30-day periods to remain listed without needing more asset-listing fees.

Paying 60 BSQ results in an asset being listed for 60 days regardless of volume. Afterward, it must maintain 0.01 BTC of trading volume over subsequent rolling 60-day periods to remain listed without needing more asset-listing fees.

These examples assume the asset listing fee is 1 BSQ per day.

How to pay the asset listing fee

There is an asset listing fee section in the DAO section of the software:

Asset listing fee area
Figure 2. Asset listing fee area

Simply select the asset you’d like to list (or re-list), specify a fee to pay according to the rules above, and hit the Pay fee button.

You will need BSQ to make the transaction, along with a little BTC for mining fees. If you don’t have BSQ, check out this doc to see how to get some. There is no other way to pay this fee.

Caveats

Controversial assets may be put to a vote

Accepting a request to list a given asset does not imply endorsement of that asset by Bisq maintainers, contributors or co-founders. Bisq maintainers merge or reject asset listing pull requests based strictly on the formal requirements laid out in this document, not on any political, legal or ethical grounds.

However, any BSQ stakeholder can request that listing a given asset be put to a vote under the normal Bisq DAO voting process.

If such a request for voting is filed, the PR will be delayed until the next voting period. Filing a request for voting is described at https://bisq.network/phase-zero.

If the vote has greater than 50% approval and reaches the required quorum (at least 5% of total BSQ stake need to vote on it) the result will be used to accept or reject the asset. Not reaching the quorum results in a rejection.

To request listing an asset that has already been rejected by such a vote, the requester must include a clear statement about what has changed since the original vote.

Any BSQ stakeholder can also request a vote to remove an already-listed asset.

Inactive assets will be de-listed

To remain listed on Bisq, assets must maintain a minimum trading volume of 0.01 BTC over a rolling period of time. This period of time depends on the amount of the last asset listing fee that was paid for the asset.

If this requirement is not met, the asset will be de-listed. Once de-listed, the asset will not appear in Bisq’s currency list, so users won’t be able to create new payment accounts for the asset. Existing offers for the asset will remain visible.

Inactive assets can be re-listed by paying the daily asset listing fee. As described above, this fee allows an asset to be listed on Bisq for the time period paid for, regardless of its trading volume.

Assets that have been previously removed from Bisq through DAO voting (i.e., removed entirely from Bisq through stakeholder consensus, not just de-listed due to inactivity) cannot be re-listed.

See details on how to pay the asset listing fee above.

Getting a new asset into production may take a while

Whenever we ship the next Bisq release, your newly-listed asset will be included and become available for trading. We typically ship once every few weeks, but there is no fixed release schedule, and release intervals can vary widely.

Pull requests that do not conform to the requirements above will be rejected

If your pull request is for any reason incorrect, e.g. code does not compile, tests do not pass, steps have been missed in the instructions, your changes will be ignored and your pull request will be closed. Getting your asset successfully listed is 100% your responsibility. If you follow the instructions, the bisq-assets maintainers will merge it; if you don’t, they won’t. It’s that simple.