Skip to content

The community maintained Flow native token registry

License

Notifications You must be signed in to change notification settings

FlowFans/flow-token-list

Repository files navigation

Deprecated

The JSON files repo of TokoenList is https://github.com/fixes-world/token-list-jsons

The JSON files of this project will also automatically synchronize the JSON data from https://github.com/fixes-world/token-list-jsons to ensure that projects previously using this repo can obtain the latest token updates correctly.


Flow Native Token List (Deprecated)

The community maintained Flow native token registry.

Following the Uniswap Token List specification found here: https://github.com/Uniswap/token-lists

How to fetch Flow native token list

Mainnet:

Testnet:

Using NPM package

Installation

npm install flow-native-token-registry
yarn add flow-native-token-registry

Examples

Query available tokens

import { TokenListProvider } from 'flow-native-token-registry';

new TokenListProvider().resolve().then((tokens) => {
  const tokenList = tokens.filterByTag('nft').getList();
  console.log(tokenList);
});

Render icon for token in React

import React, { useEffect, useState } from 'react';
import { TokenListProvider, TokenInfo } from 'flow-native-token-registry';


export const Icon = () => {
  const [tokenMap, setTokenMap] = useState<Map<string, TokenInfo>>(new Map());

  useEffect(() => {
    new TokenListProvider().resolve().then(tokens => {
      const tokenList = tokens.getList();

      setTokenMap(tokenList.reduce((map, item) => {
        map.set(`${item.symbol}`, item);
        return map;
      }, new Map()));
    });
  }, [setTokenMap]);

  const token = tokenMap.get('FLOW');
  if (!token || !token.logoURI) return null;

  return (<img src={token.logoURI} />);

Adding new token

To submit a new token:

  • Make sure the title of your pull request starts with feat(NewToken):
  • Modifications are only allowed within the token-registry folder
  • Make sure the directory name of your token is in this format: A.{tokenMainnetAddress}.{tokenContractName}
  • Make sure your token name is not the same as an exsiting one
  • You can only add one token each time
  • You can only add the files below:
logo.png (required)
token.json (required)
logo-large.png
logo.svg
testnet.token.json

Modifying existing token

To modify an existing token:

  • Make sure the title of your pull request starts with feat(UpdateToken):
  • Modifications are only allowed within the token-registry folder
  • You can only modify one token each time
  • You can only modify the files below:
logo.png
token.json
logo-large.png
logo.svg
testnet.token.json
  • PNG files in your pull request should be smaller than 20KB
  • JSON files in your pull request should conform to the schema
  • Make sure your JSON files are formatted by using prettier(it should be done automatically if you have installed dependencies of this project)
  • Please check the 'Files changed' tab on your PR to ensure that your change is as expected
  • Please link the commit or PR where the token was originally added. If the token was added by someone else, they will be asked to confirm that this change is authorized
  • Please squash commits into a single commit for cleanliness

Generate token list

Run the following command to generate token list:

./generate.sh

Semantic versioning

Lists include a version field, which follows semantic versioning.

List versions must follow the rules:

  • Increment major version when tokens are removed
  • Increment minor version when tokens are added
  • Increment patch version when tokens already on the list have minor details changed (name, symbol, logo URL, decimals)

Changing a token address or chain ID is considered both a remove and an add, and should be a major version update.

Note that list versioning is used to improve the user experience, but not for security, i.e. list versions are not meant to provide protection against malicious updates to a token list; i.e. the list semver is used as a lossy compression of the diff of list updates. List updates may still be diffed in the client dApp.