├── deps
└── .gitkeep
├── .prettierrc.json
├── src
├── templates
│ ├── scripts
│ │ └── .gitkeep
│ └── transcations
│ │ └── .gitkeep
├── index.ts
├── lib
│ ├── tokenlist.spec.ts
│ └── tokenlist.ts
├── utils
│ └── tokenlist-generator.js
├── schemas
│ ├── tokenlist.schema.json
│ └── token.schema.json
└── tokens
│ └── flow-testnet.tokenlist.json
├── token-registry
├── A.f1ab99c82dee3526.USDCFlow
│ ├── .gitkeep
│ ├── USDCf.png
│ └── USDCf.svg
├── A.231cc0dbbcffc4b7.RLY
│ ├── logo.png
│ └── token.json
├── A.231cc0dbbcffc4b7.ceAVAX
│ ├── logo.png
│ ├── logo-large.png
│ └── token.json
├── A.231cc0dbbcffc4b7.ceBNB
│ ├── logo.png
│ ├── logo-large.png
│ └── token.json
├── A.231cc0dbbcffc4b7.ceBUSD
│ ├── logo.png
│ └── token.json
├── A.231cc0dbbcffc4b7.ceDAI
│ ├── logo.png
│ ├── logo-large.png
│ └── token.json
├── A.231cc0dbbcffc4b7.ceFTM
│ ├── logo.png
│ └── token.json
├── A.231cc0dbbcffc4b7.ceUSDT
│ ├── logo.png
│ └── token.json
├── A.231cc0dbbcffc4b7.ceWBTC
│ ├── logo.png
│ └── token.json
├── A.231cc0dbbcffc4b7.ceWETH
│ ├── logo.png
│ └── token.json
├── A.3c5959b568896393.FUSD
│ ├── logo.png
│ ├── logo-large.png
│ ├── token.json
│ ├── testnet.token.json
│ └── logo.svg
├── A.687e1a7aef17b78b.Beaver
│ ├── logo.png
│ └── token.json
├── A.71e661cc981985c4.Freely
│ ├── logo.png
│ └── token.json
├── A.7bf07d719dcb8480.brasil
│ ├── logo.png
│ └── token.json
├── A.88b469471cfe5535.LBJDAO
│ ├── logo.png
│ └── token.json
├── A.d01e482eb680ec9f.REVV
│ ├── logo.png
│ └── token.json
├── A.1a494f704432b4bf.FrugDAO
│ ├── logo.png
│ └── token.json
├── A.231cc0dbbcffc4b7.ceMATIC
│ ├── logo.png
│ └── token.json
├── A.2de1bd4794003663.SwimDAO
│ ├── logo.png
│ └── token.json
├── A.3399d7c6c609b7e5.DAMO420
│ ├── logo.png
│ └── token.json
├── A.348fe2042c8a70d8.MyToken
│ ├── logo.png
│ ├── logo-large.png
│ ├── token.json
│ └── logo.svg
├── A.48ff88b4ccb47359.Duckcoin
│ ├── logo.png
│ └── token.json
├── A.67daad91e3782c80.Vampire
│ ├── logo.png
│ └── token.json
├── A.7120ab3fbf74ea9e.NCTRDAO
│ ├── logo.png
│ └── token.json
├── A.b055bef687cfca82.TrollDAO
│ ├── logo.png
│ └── token.json
├── A.c8c340cebd11f690.SdmToken
│ ├── logo.png
│ └── token.json
├── A.d4d745fab74785c5.WERFWERF
│ ├── logo.png
│ └── token.json
├── A.e452a2f5665728f5.ADUToken
│ ├── logo.png
│ └── token.json
├── A.0f9df91c9121c460.BloctoToken
│ ├── logo.png
│ └── token.json
├── A.142fa6570b62fd97.StarlyToken
│ ├── logo.png
│ └── token.json
├── A.1654653399040a61.FlowToken
│ ├── logo.png
│ ├── logo-large.png
│ ├── token.json
│ ├── testnet.token.json
│ └── logo.svg
├── A.4ea047c3e73ca460.BallerzFC
│ ├── logo.png
│ └── token.json
├── A.921ea449dffec68a.DustToken
│ ├── logo.png
│ ├── testnet.token.json
│ └── token.json
├── A.b19436aae4d94622.FiatToken
│ ├── logo.png
│ ├── logo-large.png
│ ├── token.json
│ ├── testnet.token.json
│ └── logo.svg
├── A.d6f80565193ad727.stFlowToken
│ ├── logo.png
│ ├── token.json
│ └── logo.svg
├── A.d756450f386fb4ac.OzoneToken
│ ├── logo.png
│ └── token.json
├── A.e39082fc08c1cd13.THEBEARDAO
│ ├── logo.png
│ └── token.json
├── A.e78f40fdacb5ff8f.JollyRoger
│ ├── logo.png
│ └── token.json
├── A.ee09029f1dbcd9d1.TopShotBETA
│ ├── logo.png
│ └── token.json
├── A.f887ece39166906e.VroomToken
│ ├── logo.png
│ └── token.json
├── A.fd1ccaaae39d0e79.Mainledger
│ ├── logo.png
│ └── token.json
├── A.fd1ccaaae39d0e79.Pokertime
│ ├── logo.png
│ └── token.json
├── A.078a8129525775dd.GreenBitcoin
│ ├── logo.png
│ └── token.json
├── A.53f389d96fb4ce5e.SloppyStakes
│ ├── logo.png
│ └── token.json
├── A.8259c73e487422d7.TheWolfofFlow
│ ├── logo.png
│ └── token.json
├── A.9db94c9564243ba7.aiSportsJuice
│ ├── logo.png
│ └── token.json
├── A.d5dab99b4e7301ce.PublishedNFTDAO
│ ├── logo.png
│ └── token.json
├── A.5207737ccdc76d11.StudentsofTheGame
│ ├── logo.png
│ └── token.json
├── A.cbba4d41aef83fe3.UtahJazzLegendsClub
│ ├── logo.png
│ └── token.json
├── A.cfdd90d4a00f7b5b.TeleportedTetherToken
│ ├── logo.png
│ └── token.json
├── A.d3b62ffbbc632f5a.FlowBlockchainhitCoin
│ ├── logo.png
│ └── token.json
├── A.475755d2c9dccc3a.TeleportedSportiumToken
│ ├── logo.png
│ └── token.json
├── A.789550432627e16c.OriginToken
│ ├── testnet.token.json
│ └── logo.svg
└── template.tokenlist.json
├── generate.sh
├── .husky
└── pre-commit
├── .github
├── ISSUE_TEMPLATE
│ ├── new-token.md
│ ├── update-token.md
│ └── bug_report.md
└── workflows
│ └── sync-tokenlist.yml
├── .prettierignore
├── tsconfig.module.json
├── .editorconfig
├── .github.bak
└── workflows
│ ├── ftl-pr-checker.yml
│ └── tokenlist-generator.yml
├── .eslintrc.json
├── .gitignore
├── tsconfig.json
├── package.json
├── README.md
└── LICENSE
/deps/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/src/templates/scripts/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/templates/transcations/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/tokenlist';
--------------------------------------------------------------------------------
/token-registry/A.f1ab99c82dee3526.USDCFlow/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/generate.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | node src/utils/tokenlist-generator.js
4 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | npx pretty-quick --staged
5 |
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.RLY/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.RLY/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceAVAX/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceAVAX/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceBNB/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceBNB/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceBUSD/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceBUSD/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceDAI/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceDAI/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceFTM/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceFTM/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceUSDT/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceUSDT/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceWBTC/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceWBTC/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceWETH/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceWETH/logo.png
--------------------------------------------------------------------------------
/token-registry/A.3c5959b568896393.FUSD/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.3c5959b568896393.FUSD/logo.png
--------------------------------------------------------------------------------
/token-registry/A.687e1a7aef17b78b.Beaver/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.687e1a7aef17b78b.Beaver/logo.png
--------------------------------------------------------------------------------
/token-registry/A.71e661cc981985c4.Freely/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.71e661cc981985c4.Freely/logo.png
--------------------------------------------------------------------------------
/token-registry/A.7bf07d719dcb8480.brasil/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.7bf07d719dcb8480.brasil/logo.png
--------------------------------------------------------------------------------
/token-registry/A.88b469471cfe5535.LBJDAO/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.88b469471cfe5535.LBJDAO/logo.png
--------------------------------------------------------------------------------
/token-registry/A.d01e482eb680ec9f.REVV/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.d01e482eb680ec9f.REVV/logo.png
--------------------------------------------------------------------------------
/token-registry/A.1a494f704432b4bf.FrugDAO/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.1a494f704432b4bf.FrugDAO/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceMATIC/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceMATIC/logo.png
--------------------------------------------------------------------------------
/token-registry/A.2de1bd4794003663.SwimDAO/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.2de1bd4794003663.SwimDAO/logo.png
--------------------------------------------------------------------------------
/token-registry/A.3399d7c6c609b7e5.DAMO420/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.3399d7c6c609b7e5.DAMO420/logo.png
--------------------------------------------------------------------------------
/token-registry/A.348fe2042c8a70d8.MyToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.348fe2042c8a70d8.MyToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.48ff88b4ccb47359.Duckcoin/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.48ff88b4ccb47359.Duckcoin/logo.png
--------------------------------------------------------------------------------
/token-registry/A.67daad91e3782c80.Vampire/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.67daad91e3782c80.Vampire/logo.png
--------------------------------------------------------------------------------
/token-registry/A.7120ab3fbf74ea9e.NCTRDAO/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.7120ab3fbf74ea9e.NCTRDAO/logo.png
--------------------------------------------------------------------------------
/token-registry/A.b055bef687cfca82.TrollDAO/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.b055bef687cfca82.TrollDAO/logo.png
--------------------------------------------------------------------------------
/token-registry/A.c8c340cebd11f690.SdmToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.c8c340cebd11f690.SdmToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.d4d745fab74785c5.WERFWERF/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.d4d745fab74785c5.WERFWERF/logo.png
--------------------------------------------------------------------------------
/token-registry/A.e452a2f5665728f5.ADUToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.e452a2f5665728f5.ADUToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.0f9df91c9121c460.BloctoToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.0f9df91c9121c460.BloctoToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.142fa6570b62fd97.StarlyToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.142fa6570b62fd97.StarlyToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.1654653399040a61.FlowToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.1654653399040a61.FlowToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceBNB/logo-large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceBNB/logo-large.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceDAI/logo-large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceDAI/logo-large.png
--------------------------------------------------------------------------------
/token-registry/A.3c5959b568896393.FUSD/logo-large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.3c5959b568896393.FUSD/logo-large.png
--------------------------------------------------------------------------------
/token-registry/A.4ea047c3e73ca460.BallerzFC/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.4ea047c3e73ca460.BallerzFC/logo.png
--------------------------------------------------------------------------------
/token-registry/A.921ea449dffec68a.DustToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.921ea449dffec68a.DustToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.b19436aae4d94622.FiatToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.b19436aae4d94622.FiatToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.d6f80565193ad727.stFlowToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.d6f80565193ad727.stFlowToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.d756450f386fb4ac.OzoneToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.d756450f386fb4ac.OzoneToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.e39082fc08c1cd13.THEBEARDAO/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.e39082fc08c1cd13.THEBEARDAO/logo.png
--------------------------------------------------------------------------------
/token-registry/A.e78f40fdacb5ff8f.JollyRoger/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.e78f40fdacb5ff8f.JollyRoger/logo.png
--------------------------------------------------------------------------------
/token-registry/A.ee09029f1dbcd9d1.TopShotBETA/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.ee09029f1dbcd9d1.TopShotBETA/logo.png
--------------------------------------------------------------------------------
/token-registry/A.f1ab99c82dee3526.USDCFlow/USDCf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.f1ab99c82dee3526.USDCFlow/USDCf.png
--------------------------------------------------------------------------------
/token-registry/A.f887ece39166906e.VroomToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.f887ece39166906e.VroomToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.fd1ccaaae39d0e79.Mainledger/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.fd1ccaaae39d0e79.Mainledger/logo.png
--------------------------------------------------------------------------------
/token-registry/A.fd1ccaaae39d0e79.Pokertime/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.fd1ccaaae39d0e79.Pokertime/logo.png
--------------------------------------------------------------------------------
/token-registry/A.078a8129525775dd.GreenBitcoin/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.078a8129525775dd.GreenBitcoin/logo.png
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceAVAX/logo-large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.231cc0dbbcffc4b7.ceAVAX/logo-large.png
--------------------------------------------------------------------------------
/token-registry/A.348fe2042c8a70d8.MyToken/logo-large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.348fe2042c8a70d8.MyToken/logo-large.png
--------------------------------------------------------------------------------
/token-registry/A.53f389d96fb4ce5e.SloppyStakes/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.53f389d96fb4ce5e.SloppyStakes/logo.png
--------------------------------------------------------------------------------
/token-registry/A.8259c73e487422d7.TheWolfofFlow/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.8259c73e487422d7.TheWolfofFlow/logo.png
--------------------------------------------------------------------------------
/token-registry/A.9db94c9564243ba7.aiSportsJuice/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.9db94c9564243ba7.aiSportsJuice/logo.png
--------------------------------------------------------------------------------
/token-registry/A.1654653399040a61.FlowToken/logo-large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.1654653399040a61.FlowToken/logo-large.png
--------------------------------------------------------------------------------
/token-registry/A.b19436aae4d94622.FiatToken/logo-large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.b19436aae4d94622.FiatToken/logo-large.png
--------------------------------------------------------------------------------
/token-registry/A.d5dab99b4e7301ce.PublishedNFTDAO/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.d5dab99b4e7301ce.PublishedNFTDAO/logo.png
--------------------------------------------------------------------------------
/token-registry/A.5207737ccdc76d11.StudentsofTheGame/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.5207737ccdc76d11.StudentsofTheGame/logo.png
--------------------------------------------------------------------------------
/token-registry/A.cbba4d41aef83fe3.UtahJazzLegendsClub/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.cbba4d41aef83fe3.UtahJazzLegendsClub/logo.png
--------------------------------------------------------------------------------
/token-registry/A.cfdd90d4a00f7b5b.TeleportedTetherToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.cfdd90d4a00f7b5b.TeleportedTetherToken/logo.png
--------------------------------------------------------------------------------
/token-registry/A.d3b62ffbbc632f5a.FlowBlockchainhitCoin/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.d3b62ffbbc632f5a.FlowBlockchainhitCoin/logo.png
--------------------------------------------------------------------------------
/token-registry/A.475755d2c9dccc3a.TeleportedSportiumToken/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FlowFans/flow-token-list/HEAD/token-registry/A.475755d2c9dccc3a.TeleportedSportiumToken/logo.png
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/new-token.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: New Token
3 | about: List a new token
4 | title: 'feat(newToken): '
5 | labels: NewToken
6 | assignees: ''
7 |
8 | ---
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/update-token.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Update Token
3 | about: Update some existed token
4 | title: 'feat(updateToken): '
5 | labels: UpdateToken
6 | assignees: ''
7 |
8 | ---
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # Ignore artifacts:
2 | build
3 | coverage
4 |
5 | # Ignore all HTML files:
6 | *.html
7 |
8 | package.json
9 | package-lock.json
10 | yarn.lock
11 | tsconfig.module.json
12 | .eslintrc.json
13 |
14 | .github
15 |
--------------------------------------------------------------------------------
/tsconfig.module.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "outDir": "dist/module",
6 | "module": "esnext"
7 | },
8 | "exclude": [
9 | "node_modules/**"
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | end_of_line = lf
7 | indent_size = 2
8 | indent_style = space
9 | insert_final_newline = true
10 | max_line_length = 80
11 | trim_trailing_whitespace = true
12 |
13 | [*.md]
14 | max_line_length = 0
15 | trim_trailing_whitespace = false
16 |
17 | [{go.mod,go.sum,*.go}]
18 | indent_style = tab
19 | indent_size = 4
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.RLY/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x231cc0dbbcffc4b7",
3 | "contractName": "RLY",
4 | "path": {
5 | "vault": "/storage/RLYVault",
6 | "balance": "/public/RLYBalance",
7 | "receiver": "/public/RLYReceiver"
8 | },
9 | "symbol": "RLY",
10 | "name": "Rally",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.231cc0dbbcffc4b7.RLY/logo.png",
13 | "tags": ["wrapped-celer"],
14 | "extensions": { "coingeckoId": "rally-2" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.71e661cc981985c4.Freely/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x71e661cc981985c4",
3 | "contractName": "Freely",
4 | "path": {
5 | "vault": "/storage/FreelyVault",
6 | "balance": "/public/FreelyMetadata",
7 | "receiver": "/public/FreelyReceiver"
8 | },
9 | "symbol": "FRLY",
10 | "name": "Freely",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.71e661cc981985c4.Freely/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.88b469471cfe5535.LBJDAO/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x88b469471cfe5535",
3 | "contractName": "LBJDAO",
4 | "path": {
5 | "vault": "/storage/LBJDAOVault",
6 | "balance": "/public/LBJDAOMetadata",
7 | "receiver": "/public/LBJDAOReceiver"
8 | },
9 | "symbol": "LBJ",
10 | "name": "LBJ DAO",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.88b469471cfe5535.LBJDAO/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
18 |
--------------------------------------------------------------------------------
/token-registry/A.687e1a7aef17b78b.Beaver/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x687e1a7aef17b78b",
3 | "contractName": "Beaver",
4 | "path": {
5 | "vault": "/storage/BeaverVault",
6 | "balance": "/public/BeaverMetadata",
7 | "receiver": "/public/BeaverReceiver"
8 | },
9 | "symbol": "PUSS",
10 | "name": "Beaver Coin",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.687e1a7aef17b78b.Beaver/logo.png",
13 | "tags": ["meme-coin"],
14 | "extensions": {}
15 | }
--------------------------------------------------------------------------------
/token-registry/A.7120ab3fbf74ea9e.NCTRDAO/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x7120ab3fbf74ea9e",
3 | "contractName": "NCTRDAO",
4 | "path": {
5 | "vault": "/storage/NCTRDAOVault",
6 | "balance": "/public/NCTRDAOMetadata",
7 | "receiver": "/public/NCTRDAOReceiver"
8 | },
9 | "symbol": "NCTR",
10 | "name": "NCTR DAO",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.7120ab3fbf74ea9e.NCTRDAO/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceFTM/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x231cc0dbbcffc4b7",
3 | "contractName": "ceFTM",
4 | "path": {
5 | "vault": "/storage/ceFTMVault",
6 | "balance": "/public/ceFTMBalance",
7 | "receiver": "/public/ceFTMReceiver"
8 | },
9 | "symbol": "ceFTM",
10 | "name": "Fantom (Celer)",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.231cc0dbbcffc4b7.ceFTM/logo.png",
13 | "tags": ["wrapped-celer"],
14 | "extensions": { "coingeckoId": "fantom" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.3399d7c6c609b7e5.DAMO420/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x3399d7c6c609b7e5",
3 | "contractName": "DAMO420",
4 | "path": {
5 | "vault": "/storage/DAMO420Vault",
6 | "balance": "/public/DAMO420Metadata",
7 | "receiver": "/public/DAMO420Receiver"
8 | },
9 | "symbol": "DAMO",
10 | "name": "DA.Marijuana.O",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.3399d7c6c609b7e5.DAMO420/logo.png",
13 | "tags": ["memecoin", "governance-token"],
14 | "extensions": {}
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.67daad91e3782c80.Vampire/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x67daad91e3782c80",
3 | "contractName": "Vampire",
4 | "path": {
5 | "vault": "/storage/VampireVault",
6 | "balance": "/public/VampireMetadata",
7 | "receiver": "/public/VampireReceiver"
8 | },
9 | "symbol": "SUCK",
10 | "name": "Vampire Coin",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.67daad91e3782c80.Vampire/logo.png",
13 | "tags": [
14 | "memecoin"
15 | ],
16 | "extensions": {}
17 | }
18 |
--------------------------------------------------------------------------------
/token-registry/A.d01e482eb680ec9f.REVV/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xd01e482eb680ec9f",
3 | "contractName": "REVV",
4 | "path": {
5 | "vault": "/storage/revvVault",
6 | "balance": "/public/revvBalance",
7 | "receiver": "/public/revvReceiver"
8 | },
9 | "symbol": "REVV",
10 | "name": "REVV",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.d01e482eb680ec9f.REVV/logo.png",
13 | "tags": ["utility-token"],
14 | "extensions": { "website": "https://revvmotorsport.com/" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.3c5959b568896393.FUSD/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x3c5959b568896393",
3 | "contractName": "FUSD",
4 | "path": {
5 | "vault": "/storage/fusdVault",
6 | "balance": "/public/fusdBalance",
7 | "receiver": "/public/fusdReceiver"
8 | },
9 | "symbol": "FUSD",
10 | "name": "Flow USD",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.3c5959b568896393.FUSD/logo.svg",
13 | "tags": ["stablecoin"],
14 | "extensions": { "website": "https://docs.onflow.org/fusd/" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.e452a2f5665728f5.ADUToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xe452a2f5665728f5",
3 | "contractName": "ADUToken",
4 | "path": {
5 | "vault": "/storage/ADUTokenVault",
6 | "balance": "/public/ADUTokenMetadata",
7 | "receiver": "/public/ADUTokenReceiver"
8 | },
9 | "symbol": "ADU",
10 | "name": "All Day Unlimited",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.e452a2f5665728f5.ADUToken/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceWETH/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x231cc0dbbcffc4b7",
3 | "contractName": "ceWETH",
4 | "path": {
5 | "vault": "/storage/ceWETHVault",
6 | "balance": "/public/ceWETHBalance",
7 | "receiver": "/public/ceWETHReceiver"
8 | },
9 | "symbol": "ceWETH",
10 | "name": "Wrapped Ether (Celer)",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.231cc0dbbcffc4b7.ceWETH/logo.png",
13 | "tags": ["wrapped-celer"],
14 | "extensions": { "coingeckoId": "weth" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.348fe2042c8a70d8.MyToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x348fe2042c8a70d8",
3 | "contractName": "MyToken",
4 | "path": {
5 | "vault": "/storage/mytokenVault",
6 | "balance": "/public/mytokenBalance",
7 | "receiver": "/public/mytokenReceiver"
8 | },
9 | "symbol": "MY",
10 | "name": "My Token",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.348fe2042c8a70d8.MyToken/logo.svg",
13 | "tags": ["utility-token"],
14 | "extensions": { "website": "https://mynft.io/" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.3c5959b568896393.FUSD/testnet.token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xe223d8a629e49c68",
3 | "contractName": "FUSD",
4 | "path": {
5 | "vault": "/storage/fusdVault",
6 | "balance": "/public/fusdBalance",
7 | "receiver": "/public/fusdReceiver"
8 | },
9 | "symbol": "FUSD",
10 | "name": "Flow USD",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.3c5959b568896393.FUSD/logo.svg",
13 | "tags": ["stablecoin"],
14 | "extensions": { "website": "https://docs.onflow.org/fusd/" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.921ea449dffec68a.DustToken/testnet.token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x9392a4a7c3f49a0b",
3 | "contractName": "FlovatarDustToken",
4 | "path": {
5 | "vault": "/storage/FlovatarDustTokenVault",
6 | "balance": "/public/FlovatarDustTokenBalance",
7 | "receiver": "/public/FlovatarDustTokenReceiver"
8 | },
9 | "symbol": "DUST",
10 | "name": "Flovatar ÐUST",
11 | "decimals": 8,
12 | "logoURI": "http://images.flovatar.com/logo-round.png",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "website": "https://flovatar.com/"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/token-registry/A.ee09029f1dbcd9d1.TopShotBETA/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xee09029f1dbcd9d1",
3 | "contractName": "TopShotBETA",
4 | "path": {
5 | "vault": "/storage/TopShotBETAVault",
6 | "balance": "/public/TopShotBETAMetadata",
7 | "receiver": "/public/TopShotBETAReceiver"
8 | },
9 | "symbol": "BETA",
10 | "name": "Top Shot BETA",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.ee09029f1dbcd9d1.TopShotBETA/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceMATIC/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x231cc0dbbcffc4b7",
3 | "contractName": "ceMATIC",
4 | "path": {
5 | "vault": "/storage/ceMATICVault",
6 | "balance": "/public/ceMATICBalance",
7 | "receiver": "/public/ceMATICReceiver"
8 | },
9 | "symbol": "ceMATIC",
10 | "name": "Matic Token (Celer)",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.231cc0dbbcffc4b7.ceMATIC/logo.png",
13 | "tags": ["wrapped-celer"],
14 | "extensions": { "coingeckoId": "matic-network" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.e78f40fdacb5ff8f.JollyRoger/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xe78f40fdacb5ff8f",
3 | "contractName": "JollyRoger",
4 | "path": {
5 | "vault": "/storage/JollyRogerVault",
6 | "balance": "/public/JollyRogerMetadata",
7 | "receiver": "/public/JollyRogerReceiver"
8 | },
9 | "symbol": "JOLLY",
10 | "name": "Jolly Roger",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.e78f40fdacb5ff8f.JollyRoger/logo.png",
13 | "tags": ["meme-coin"],
14 | "extensions": {}
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.2de1bd4794003663.SwimDAO/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x2de1bd4794003663",
3 | "contractName": "SwimDAO",
4 | "path": {
5 | "vault": "/storage/SwimDAOVault",
6 | "balance": "/public/SwimDAOMetadata",
7 | "receiver": "/public/SwimDAOReceiver"
8 | },
9 | "symbol": "SWIM",
10 | "name": "SwimDAO",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.2de1bd4794003663.SwimDAO/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.c8c340cebd11f690.SdmToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xc8c340cebd11f690",
3 | "contractName": "SdmToken",
4 | "path": {
5 | "vault": "/storage/sdmTokenVault",
6 | "balance": "/public/sdmTokenBalance",
7 | "receiver": "/public/sdmTokenReceiver"
8 | },
9 | "symbol": "SDM",
10 | "name": "Sdm Token",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.c8c340cebd11f690.SdmToken/logo.png",
13 | "tags": ["utility-token"],
14 | "extensions": { "website": "https://flow.darkcountry.io/" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.1a494f704432b4bf.FrugDAO/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x1a494f704432b4bf",
3 | "contractName": "FrugDAO",
4 | "path": {
5 | "vault": "/storage/FrugDAOVault",
6 | "balance": "/public/FrugDAOMetadata",
7 | "receiver": "/public/FrugDAOReceiver"
8 | },
9 | "symbol": "FRUG",
10 | "name": "Frug",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.1a494f704432b4bf.FrugDAO/logo.png",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "twitter": "https://twitter.com/frugcoin"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/token-registry/A.d4d745fab74785c5.WERFWERF/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xd4d745fab74785c5",
3 | "contractName": "WERFWERF",
4 | "path": {
5 | "vault": "/storage/WERFWERFVault",
6 | "balance": "/public/WERFWERFMetadata",
7 | "receiver": "/public/WERFWERFReceiver"
8 | },
9 | "symbol": "WERF",
10 | "name": "WERFWERF",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.d4d745fab74785c5.WERFWERF/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceUSDT/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x231cc0dbbcffc4b7",
3 | "contractName": "ceUSDT",
4 | "path": {
5 | "vault": "/storage/ceUSDTVault",
6 | "balance": "/public/ceUSDTBalance",
7 | "receiver": "/public/ceUSDTReceiver"
8 | },
9 | "symbol": "ceUSDT",
10 | "name": "Tether USD (Celer)",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.231cc0dbbcffc4b7.ceUSDT/logo.png",
13 | "tags": ["wrapped-celer"],
14 | "extensions": { "coingeckoId": "tether", "website": "https://tether.to/" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.d756450f386fb4ac.OzoneToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xd756450f386fb4ac",
3 | "contractName": "OzoneToken",
4 | "path": {
5 | "vault": "/storage/ozonetokenVault",
6 | "balance": "/public/ozonetokenBalance",
7 | "receiver": "/public/ozonetokenReceiver"
8 | },
9 | "symbol": "Ozone",
10 | "name": "Ozone Token",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.d756450f386fb4ac.OzoneToken/logo.png",
13 | "tags": ["utility-token"],
14 | "extensions": { "website": "https://ozoneuniverse.com/" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.f887ece39166906e.VroomToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xf887ece39166906e",
3 | "contractName": "VroomToken",
4 | "path": {
5 | "vault": "/storage/VroomTokenVault",
6 | "balance": "/public/VroomTokenBalance",
7 | "receiver": "/public/VroomTokenReceiver"
8 | },
9 | "symbol": "VROOM",
10 | "name": "Vroom",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.f887ece39166906e.VroomToken/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.921ea449dffec68a.DustToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x921ea449dffec68a",
3 | "contractName": "FlovatarDustToken",
4 | "path": {
5 | "vault": "/storage/FlovatarDustTokenVault",
6 | "balance": "/public/FlovatarDustTokenBalance",
7 | "receiver": "/public/FlovatarDustTokenReceiver"
8 | },
9 | "symbol": "DUST",
10 | "name": "Flovatar ÐUST",
11 | "decimals": 8,
12 | "logoURI": "http://images.flovatar.com/logo-round.png",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "website": "https://flovatar.com/",
16 | "coingeckoId": "flovatar-dust"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/token-registry/A.b055bef687cfca82.TrollDAO/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xb055bef687cfca82",
3 | "contractName": "TrollDAO",
4 | "path": {
5 | "vault": "/storage/TrollDAOVault",
6 | "balance": "/public/TrollDAOMetadata",
7 | "receiver": "/public/TrollDAOReceiver"
8 | },
9 | "symbol": "TROLL",
10 | "name": "Troll DAO",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.b055bef687cfca82.TrollDAO/logo.png",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "twitter": "https://www.twitter.com/trollonflow"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/token-registry/A.e39082fc08c1cd13.THEBEARDAO/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xe39082fc08c1cd13",
3 | "contractName": "THEBEARDAO",
4 | "path": {
5 | "vault": "/storage/THEBEARDAOVault",
6 | "balance": "/public/THEBEARDAOMetadata",
7 | "receiver": "/public/THEBEARDAOReceiver"
8 | },
9 | "symbol": "BEAR",
10 | "name": "THE BEAR DAO",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.e39082fc08c1cd13.THEBEARDAO/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.fd1ccaaae39d0e79.Pokertime/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xfd1ccaaae39d0e79",
3 | "contractName": "Pokertime",
4 | "path": {
5 | "vault": "/storage/PokertimeVault",
6 | "balance": "/public/PokertimeMetadata",
7 | "receiver": "/public/PokertimeReceiver"
8 | },
9 | "symbol": "PKR",
10 | "name": "Poker chip",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.fd1ccaaae39d0e79.Pokertime/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.5207737ccdc76d11.StudentsofTheGame/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x5207737ccdc76d11",
3 | "contractName": "StudentsofTheGame",
4 | "path": {
5 | "vault": "/storage/StudentsofTheGameVault",
6 | "balance": "/public/StudentsofTheGameMetadata",
7 | "receiver": "/public/StudentsofTheGameReceiver"
8 | },
9 | "symbol": "GAME",
10 | "name": "Students of The Game",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.5207737ccdc76d11.StudentsofTheGame/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.142fa6570b62fd97.StarlyToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x142fa6570b62fd97",
3 | "contractName": "StarlyToken",
4 | "path": {
5 | "vault": "/storage/starlyTokenVault",
6 | "balance": "/public/starlyTokenBalance",
7 | "receiver": "/public/starlyTokenReceiver"
8 | },
9 | "symbol": "STARLY",
10 | "name": "Starly Token",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.142fa6570b62fd97.StarlyToken/logo.png",
13 | "tags": ["utility-token"],
14 | "extensions": { "coingeckoId": "starly", "website": "https://starly.io/" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.789550432627e16c.OriginToken/testnet.token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x789550432627e16c",
3 | "contractName": "OriginToken",
4 | "path": {
5 | "vault": "/storage/originTicketVault",
6 | "balance": "/public/originTicketBalance",
7 | "receiver": "/public/originTicketReceiver"
8 | },
9 | "symbol": "OT",
10 | "name": "Origin Token",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.789550432627e16c.OriginToken/logo.svg",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "website": "http://testnet.origin30.com/"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/token-registry/A.8259c73e487422d7.TheWolfofFlow/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x8259c73e487422d7",
3 | "contractName": "TheWolfofFlow",
4 | "path": {
5 | "vault": "/storage/TheWolfofFlowVault",
6 | "balance": "/public/TheWolfofFlowMetadata",
7 | "receiver": "/public/TheWolfofFlowReceiver"
8 | },
9 | "symbol": "WOLF",
10 | "name": "The Wolf of Flow",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.8259c73e487422d7.TheWolfofFlow/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.cbba4d41aef83fe3.UtahJazzLegendsClub/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xcbba4d41aef83fe3",
3 | "contractName": "UtahJazzLegendsClub",
4 | "path": {
5 | "vault": "/storage/UtahJazzLegendsClubVault",
6 | "balance": "/public/UtahJazzLegendsClubMetadata",
7 | "receiver": "/public/UtahJazzLegendsClubReceiver"
8 | },
9 | "symbol": "UJLC",
10 | "name": "Utah Jazz Legends Club",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.cbba4d41aef83fe3.UtahJazzLegendsClub/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.fd1ccaaae39d0e79.Mainledger/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xfd1ccaaae39d0e79",
3 | "contractName": "Mainledger",
4 | "path": {
5 | "vault": "/storage/MainledgerVault",
6 | "balance": "/public/MainledgerMetadata",
7 | "receiver": "/public/MainledgerReceiver"
8 | },
9 | "symbol": "MLC",
10 | "name": "Mainledger coin",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.fd1ccaaae39d0e79.Mainledger/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
18 |
--------------------------------------------------------------------------------
/token-registry/A.0f9df91c9121c460.BloctoToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x0f9df91c9121c460",
3 | "contractName": "BloctoToken",
4 | "path": {
5 | "vault": "/storage/bloctoTokenVault",
6 | "balance": "/public/bloctoTokenBalance",
7 | "receiver": "/public/bloctoTokenReceiver"
8 | },
9 | "symbol": "BLT",
10 | "name": "Blocto Token",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.0f9df91c9121c460.BloctoToken/logo.png",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "website": "https://blocto.app/",
16 | "coingeckoId": "blocto-token"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/token-registry/A.48ff88b4ccb47359.Duckcoin/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x48ff88b4ccb47359",
3 | "contractName": "Duckcoin",
4 | "path": {
5 | "vault": "/storage/DuckcoinVault",
6 | "balance": "/public/DuckcoinMetadata",
7 | "receiver": "/public/DuckcoinReceiver"
8 | },
9 | "symbol": "Duck",
10 | "name": "Duckcoin",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.48ff88b4ccb47359.Duckcoin/logo.png",
13 | "tags": ["governance-token"],
14 | "extensions": {
15 | "website": "https://duck-coin.vip",
16 | "twitter": "https://twitter.com/Duck_coin_flow"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/token-registry/A.475755d2c9dccc3a.TeleportedSportiumToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x475755d2c9dccc3a",
3 | "contractName": "TeleportedSportiumToken",
4 | "path": {
5 | "vault": "/storage/TeleportedSportiumTokenVault",
6 | "balance": "/public/TeleportedSportiumTokenBalance",
7 | "receiver": "/public/TeleportedSportiumTokenReceiver"
8 | },
9 | "symbol": "SPRT",
10 | "name": "Teleported Sportium Token",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.475755d2c9dccc3a.TeleportedSportiumToken/logo.png",
13 | "tags": ["teleported-token"],
14 | "extensions": { "coingeckoId": "sportium" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.cfdd90d4a00f7b5b.TeleportedTetherToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xcfdd90d4a00f7b5b",
3 | "contractName": "TeleportedTetherToken",
4 | "path": {
5 | "vault": "/storage/teleportedTetherTokenVault",
6 | "balance": "/public/teleportedTetherTokenBalance",
7 | "receiver": "/public/teleportedTetherTokenReceiver"
8 | },
9 | "symbol": "tUSDT",
10 | "name": "Teleported Tether Token",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.cfdd90d4a00f7b5b.TeleportedTetherToken/logo.png",
13 | "tags": ["teleported-token", "stablecoin"],
14 | "extensions": { "website": "https://blocto.app/" }
15 | }
16 |
--------------------------------------------------------------------------------
/token-registry/A.d3b62ffbbc632f5a.FlowBlockchainhitCoin/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xd3b62ffbbc632f5a",
3 | "contractName": "FlowBlockchainhitCoin",
4 | "path": {
5 | "vault": "/storage/FlowBlockchainhitCoinVault",
6 | "balance": "/public/FlowBlockchainhitCoinMetadata",
7 | "receiver": "/public/FlowBlockchainhitCoinReceiver"
8 | },
9 | "symbol": "HIT",
10 | "name": "Flow Blockchain $HIT Coin",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.d3b62ffbbc632f5a.FlowBlockchainhitCoin/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {}
17 | }
--------------------------------------------------------------------------------
/token-registry/A.4ea047c3e73ca460.BallerzFC/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x4ea047c3e73ca460",
3 | "contractName": "BallerzFC",
4 | "path": {
5 | "vault": "/storage/BallerzFCVault",
6 | "balance": "/public/BallerzFCMetadata",
7 | "receiver": "/public/BallerzFCReceiver"
8 | },
9 | "symbol": "BFC",
10 | "name": "Ballerz FC",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.4ea047c3e73ca460.BallerzFC/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {
17 | "twitter": "https://twitter.com/Ballerz__FC",
18 | "discord": "https://discord.com/invite/sDBp8YdH"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/token-registry/A.53f389d96fb4ce5e.SloppyStakes/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x53f389d96fb4ce5e",
3 | "contractName": "SloppyStakes",
4 | "path": {
5 | "vault": "/storage/SloppyStakesVault",
6 | "balance": "/public/SloppyStakesMetadata",
7 | "receiver": "/public/SloppyStakesReceiver"
8 | },
9 | "symbol": "LOPPY",
10 | "name": "Sloppy Stakes",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.53f389d96fb4ce5e.SloppyStakes/logo.png",
13 | "tags": [
14 | "utility-token"
15 | ],
16 | "extensions": {
17 | "twitter": "https://twitter.com/alxocity",
18 | "discord": "https://discord.com/invite/GYV8JRR"
19 | }
20 | }
--------------------------------------------------------------------------------
/token-registry/A.7bf07d719dcb8480.brasil/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x7bf07d719dcb8480",
3 | "contractName": "brasil",
4 | "path": {
5 | "vault": "/storage/brasilVault",
6 | "balance": "/public/brasilMetadata",
7 | "receiver": "/public/brasilReceiver"
8 | },
9 | "symbol": "BR",
10 | "name": "brasil",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.7bf07d719dcb8480.brasil/logo.png",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "website": "https://toucans.ecdao.org/p/brasil",
16 | "twitter": "https://twitter.com/flowbrasilchain",
17 | "discord": "https://discord.gg/hT8EpC5mUN"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/token-registry/A.d6f80565193ad727.stFlowToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xd6f80565193ad727",
3 | "contractName": "stFlowToken",
4 | "path": {
5 | "vault": "/storage/stFlowTokenVault",
6 | "balance": "/public/stFlowTokenBalance",
7 | "receiver": "/public/stFlowTokenReceiver"
8 | },
9 | "symbol": "stFlow",
10 | "name": "Liquid Staked Flow",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.d6f80565193ad727.stFlowToken/logo.svg",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "website": "https://app.increment.fi/staking",
16 | "twitter": "https://twitter.com/incrementfi",
17 | "discord": "https://discord.gg/r2keKxuKqX"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceDAI/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x231cc0dbbcffc4b7",
3 | "contractName": "ceDAI",
4 | "path": {
5 | "vault": "/storage/ceDAIVault",
6 | "balance": "/public/ceDAIBalance",
7 | "receiver": "/public/ceDAIReceiver"
8 | },
9 | "symbol": "ceDAI",
10 | "name": "Dai Stablecoin (Celer)",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.231cc0dbbcffc4b7.ceDAI/logo.png",
13 | "tags": ["wrapped-celer"],
14 | "extensions": {
15 | "address": "0x6b175474e89094c44da98b954eedeac495271d0f",
16 | "assetContract": "https://etherscan.io/address/0x6b175474e89094c44da98b954eedeac495271d0f",
17 | "coingeckoId": "dai"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceAVAX/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x231cc0dbbcffc4b7",
3 | "contractName": "ceAVAX",
4 | "path": {
5 | "vault": "/storage/ceAVAXVault",
6 | "balance": "/public/ceAVAXBalance",
7 | "receiver": "/public/ceAVAXReceiver"
8 | },
9 | "symbol": "ceAVAX",
10 | "name": "Avalanche (Celer)",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.231cc0dbbcffc4b7.ceAVAX/logo.png",
13 | "tags": ["wrapped-celer"],
14 | "extensions": {
15 | "address": "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7",
16 | "assetContract": "https://snowtrace.io/token/0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7",
17 | "coingeckoId": "avalanche-2"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceBNB/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x231cc0dbbcffc4b7",
3 | "contractName": "ceBNB",
4 | "path": {
5 | "vault": "/storage/ceBNBVault",
6 | "balance": "/public/ceBNBBalance",
7 | "receiver": "/public/ceBNBReceiver"
8 | },
9 | "symbol": "ceBNB",
10 | "name": "Binance Coin (Celer)",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.231cc0dbbcffc4b7.ceBNB/logo.png",
13 | "tags": ["wrapped-celer"],
14 | "extensions": {
15 | "address": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
16 | "assetContract": "https://bscscan.com/address/0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
17 | "coingeckoId": "binancecoin"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/token-registry/A.078a8129525775dd.GreenBitcoin/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x078a8129525775dd",
3 | "contractName": "GreenBitcoin",
4 | "path": {
5 | "vault": "/storage/GreenBitcoinVault",
6 | "balance": "/public/GreenBitcoinMetadata",
7 | "receiver": "/public/GreenBitcoinReceiver"
8 | },
9 | "symbol": "GBTC",
10 | "name": "Green Bitcoin",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.078a8129525775dd.GreenBitcoin/logo.png",
13 | "tags": ["governance-token"],
14 | "extensions": {
15 | "website": "https://toucans.ecdao.org/p/GreenBitcoin",
16 | "twitter": "https://twitter.com/_GreenBitcoin",
17 | "discord": "https://discord.gg/vY8pK9x8"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceBUSD/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x231cc0dbbcffc4b7",
3 | "contractName": "ceBUSD",
4 | "path": {
5 | "vault": "/storage/ceBUSDVault",
6 | "balance": "/public/ceBUSDBalance",
7 | "receiver": "/public/ceBUSDReceiver"
8 | },
9 | "symbol": "ceBUSD",
10 | "name": "Binance USD (Celer)",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.231cc0dbbcffc4b7.ceBUSD/logo.png",
13 | "tags": ["wrapped-celer"],
14 | "extensions": {
15 | "address": "0xe9e7cea3dedca5984780bafc599bd69add087d56",
16 | "assetContract": "https://bscscan.com/address/0xe9e7cea3dedca5984780bafc599bd69add087d56",
17 | "coingeckoId": "binance-usd"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/token-registry/A.d5dab99b4e7301ce.PublishedNFTDAO/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xd5dab99b4e7301ce",
3 | "contractName": "PublishedNFTDAO",
4 | "path": {
5 | "vault": "/storage/PublishedNFTDAOVault",
6 | "balance": "/public/PublishedNFTDAOMetadata",
7 | "receiver": "/public/PublishedNFTDAOReceiver"
8 | },
9 | "symbol": "PAGE",
10 | "name": "PublishedNFTDAO",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.d5dab99b4e7301ce.PublishedNFTDAO/logo.png",
13 | "tags": ["governance-token"],
14 | "extensions": {
15 | "website": "https://publishednft.io",
16 | "twitter": "https://twitter.com/publishednft",
17 | "discord": "https://discord.gg/RHH5aH44k9"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/.github.bak/workflows/ftl-pr-checker.yml:
--------------------------------------------------------------------------------
1 | name: FTL-PR-CHECKER
2 | on:
3 | pull_request:
4 | types: [opened, reopened, labeled, synchronize, edited, ready_for_review]
5 | pull_request_target:
6 | types: [opened, reopened, labeled, synchronize, edited, ready_for_review]
7 |
8 | jobs:
9 | validate:
10 | needs: label
11 | name: Validate PR Files
12 | runs-on: ubuntu-latest
13 | permissions:
14 | contents: write
15 | pull-requests: write
16 | steps:
17 | - uses: LanfordCai/ftl-file-checker@v0.0.2
18 | with:
19 | TOKEN_JSON_SCHEMA_PATH: 'src/schemas/token.schema.json'
20 | REF: ${{ github.head_ref || github.ref_name }}
21 | env:
22 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
23 |
--------------------------------------------------------------------------------
/token-registry/A.231cc0dbbcffc4b7.ceWBTC/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x231cc0dbbcffc4b7",
3 | "contractName": "ceWBTC",
4 | "path": {
5 | "vault": "/storage/ceWBTCVault",
6 | "balance": "/public/ceWBTCBalance",
7 | "receiver": "/public/ceWBTCReceiver"
8 | },
9 | "symbol": "ceWBTC",
10 | "name": "Wrapped BTC (Celer)",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.231cc0dbbcffc4b7.ceWBTC/logo.png",
13 | "tags": ["wrapped-celer"],
14 | "extensions": {
15 | "address": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
16 | "assetContract": "https://etherscan.io/address/0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
17 | "coingeckoId": "wrapped-bitcoin"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/token-registry/A.b19436aae4d94622.FiatToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xb19436aae4d94622",
3 | "contractName": "FiatToken",
4 | "path": {
5 | "vault": "/storage/USDCVault",
6 | "balance": "/public/USDCVaultBalance",
7 | "receiver": "/public/USDCVaultReceiver"
8 | },
9 | "symbol": "USDC",
10 | "name": "USD Coin",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.b19436aae4d94622.FiatToken/logo.svg",
13 | "tags": ["stablecoin"],
14 | "extensions": {
15 | "website": "https://www.circle.com/en/usdc-multichain/flow",
16 | "coingeckoId": "usd-coin",
17 | "documentation": "https://developers.circle.com/stablecoins/docs",
18 | "twitter": "https://twitter.com/circle"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/token-registry/A.9db94c9564243ba7.aiSportsJuice/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x9db94c9564243ba7",
3 | "contractName": "aiSportsJuice",
4 | "path": {
5 | "vault": "/storage/aiSportsJuiceVault",
6 | "balance": "/public/aiSportsJuiceMetadata",
7 | "receiver": "/public/aiSportsJuiceReceiver"
8 | },
9 | "symbol": "JUICE",
10 | "name": "aiSportsJuice",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.9db94c9564243ba7.aiSportsJuice/logo.png",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "website": "https://www.aisportspro.com/",
16 | "twitter": "https://twitter.com/aisportspro",
17 | "discord": "https://discord.gg/VKvUxMwu5r"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/token-registry/A.b19436aae4d94622.FiatToken/testnet.token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0xa983fecbed621163",
3 | "contractName": "FiatToken",
4 | "path": {
5 | "vault": "/storage/USDCVault",
6 | "balance": "/public/USDCVaultBalance",
7 | "receiver": "/public/USDCVaultReceiver"
8 | },
9 | "symbol": "USDC",
10 | "name": "USD Coin",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.b19436aae4d94622.FiatToken/logo.svg",
13 | "tags": ["stablecoin"],
14 | "extensions": {
15 | "website": "https://www.circle.com/en/usdc-multichain/flow",
16 | "coingeckoId": "usd-coin",
17 | "documentation": "https://developers.circle.com/stablecoins/docs",
18 | "twitter": "https://twitter.com/circle"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/token-registry/A.789550432627e16c.OriginToken/logo.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/token-registry/A.3c5959b568896393.FUSD/logo.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/token-registry/A.1654653399040a61.FlowToken/token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x1654653399040a61",
3 | "contractName": "FlowToken",
4 | "path": {
5 | "vault": "/storage/flowTokenVault",
6 | "balance": "/public/flowTokenBalance",
7 | "receiver": "/public/flowTokenReceiver"
8 | },
9 | "symbol": "FLOW",
10 | "name": "Flow",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.1654653399040a61.FlowToken/logo.svg",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "coingeckoId": "flow",
16 | "website": "https://www.onflow.org",
17 | "twitter": "https://twitter.com/flow_blockchain",
18 | "discord": "http://discord.gg/flow",
19 | "github": "https://github.com/onflow/flow-core-contracts",
20 | "documentation": "https://developers.flow.com/references/core-contracts/flow-token"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/token-registry/A.1654653399040a61.FlowToken/testnet.token.json:
--------------------------------------------------------------------------------
1 | {
2 | "address": "0x7e60df042a9c0868",
3 | "contractName": "FlowToken",
4 | "path": {
5 | "vault": "/storage/flowTokenVault",
6 | "balance": "/public/flowTokenBalance",
7 | "receiver": "/public/flowTokenReceiver"
8 | },
9 | "symbol": "FLOW",
10 | "name": "Flow",
11 | "decimals": 8,
12 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.1654653399040a61.FlowToken/logo.svg",
13 | "tags": ["utility-token"],
14 | "extensions": {
15 | "coingeckoId": "flow",
16 | "website": "https://www.onflow.org",
17 | "twitter": "https://twitter.com/flow_blockchain",
18 | "discord": "http://discord.gg/flow",
19 | "github": "https://github.com/onflow/flow-core-contracts",
20 | "documentation": "https://developers.flow.com/references/core-contracts/flow-token"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "parser": "@typescript-eslint/parser",
4 | "parserOptions": { "project": "./tsconfig.json" },
5 | "env": { "es6": true },
6 | "ignorePatterns": ["node_modules", "build", "coverage"],
7 | "plugins": ["import", "eslint-comments"],
8 | "extends": [
9 | "eslint:recommended",
10 | "plugin:eslint-comments/recommended",
11 | "plugin:@typescript-eslint/recommended",
12 | "plugin:import/typescript",
13 | "prettier",
14 | "prettier/@typescript-eslint"
15 | ],
16 | "globals": { "BigInt": true, "console": true, "WebAssembly": true },
17 | "rules": {
18 | "@typescript-eslint/explicit-module-boundary-types": "off",
19 | "eslint-comments/disable-enable-pair": [
20 | "error",
21 | { "allowWholeFile": true }
22 | ],
23 | "eslint-comments/no-unused-disable": "error",
24 | "import/order": [
25 | "error",
26 | { "newlines-between": "always", "alphabetize": { "order": "asc" } }
27 | ],
28 | "sort-imports": [
29 | "error",
30 | { "ignoreDeclarationSort": true, "ignoreCase": true }
31 | ]
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/.github.bak/workflows/tokenlist-generator.yml:
--------------------------------------------------------------------------------
1 | name: FTL-LIST-GENERATOR
2 | on:
3 | schedule:
4 | - cron: '0 0 * * *'
5 | # Allow manual triggering of the workflow
6 | workflow_dispatch:
7 | inputs:
8 | name:
9 | description: 'Reason for sync'
10 | required: true
11 | default: 'Manual sync'
12 | type: string
13 |
14 | permissions:
15 | contents: write
16 | pull-requests: write
17 |
18 | jobs:
19 | generate:
20 | name: Generate Token List
21 | runs-on: ubuntu-latest
22 | steps:
23 | - name: Checkout
24 | uses: actions/checkout@v4
25 | with:
26 | token: ${{ secrets.GITHUB_TOKEN }}
27 | fetch-depth: 0
28 | - uses: actions/setup-node@v4
29 | with:
30 | node-version: '18'
31 | - run: yarn
32 | - run: node src/utils/tokenlist-generator.js
33 | - run: yarn prettier --write src/tokens/*.json
34 | - name: Create Pull Request
35 | uses: peter-evans/create-pull-request@v4
36 | with:
37 | token: ${{ secrets.GITHUB_TOKEN }}
38 | title: 'feat(TokenList): auto-generate tokenlist'
39 | body: 'auto-generated tokenlist'
40 | labels: TokenList
41 | branch: 'feature/auto-generate'
42 | branch-suffix: timestamp
43 | delete-branch: true
44 | base: main
45 |
--------------------------------------------------------------------------------
/src/lib/tokenlist.spec.ts:
--------------------------------------------------------------------------------
1 | import fs from 'fs';
2 |
3 | import test from 'ava';
4 |
5 | import { ENV, Strategy, TokenInfo, TokenListProvider } from './tokenlist';
6 |
7 | test('Token list is filterable by a tag', async (t) => {
8 | const list = (
9 | await new TokenListProvider().resolve(Strategy.Static, ENV.Mainnet)
10 | )
11 | .filterByTag('nft')
12 | .getList();
13 |
14 | t.false(list.some((item) => item.symbol === 'SOL'));
15 | });
16 |
17 | test('Token list can exclude by a tag', async (t) => {
18 | const list = (
19 | await new TokenListProvider().resolve(Strategy.Static, ENV.Mainnet)
20 | )
21 | .excludeByTag('nft')
22 | .getList();
23 |
24 | t.false(list.some((item) => item.tags === ['nft']));
25 | });
26 |
27 | test('Token list is a valid json', async (t) => {
28 | t.notThrows(() => {
29 | const content = fs
30 | .readFileSync('./src/tokens/flow-mainnet.tokenlist.json')
31 | .toString();
32 | JSON.parse(content.toString());
33 | });
34 | });
35 |
36 | test('Token list does not have duplicate entries', async (t) => {
37 | const list = await new TokenListProvider().resolve(
38 | Strategy.GitHub,
39 | ENV.Mainnet
40 | );
41 |
42 | const map = new Map();
43 | list.getList().reduce((agg, item) => {
44 | const key = `${item.address}.${item.contractName}`;
45 | console.log(key);
46 | if (agg.has(key)) {
47 | console.log(key);
48 | }
49 | t.false(agg.has(key));
50 | agg.set(key, item);
51 | return agg;
52 | }, map);
53 | });
54 |
--------------------------------------------------------------------------------
/token-registry/A.1654653399040a61.FlowToken/logo.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/token-registry/A.d6f80565193ad727.stFlowToken/logo.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/token-registry/A.b19436aae4d94622.FiatToken/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/token-registry/template.tokenlist.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Flow Token List",
3 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.1654653399040a61.FlowToken/logo.svg",
4 | "keywords": ["flow", "fnt"],
5 | "tags": {
6 | "stablecoin": {
7 | "name": "stablecoin",
8 | "description": "Tokens that are fixed to an external asset, e.g. the US dollar"
9 | },
10 | "ethereum": {
11 | "name": "ethereum",
12 | "description": "Asset bridged from ethereum"
13 | },
14 | "teleported-token": {
15 | "name": "teleported-token",
16 | "description": "Asset teleported from other blockchains by Blocto"
17 | },
18 | "wrapped-celer": {
19 | "name": "wrapped-celer",
20 | "description": "Asset wrapped using celer bridge"
21 | },
22 | "lp-token": {
23 | "name": "lp-token",
24 | "description": "Asset representing liquidity provider token"
25 | },
26 | "nft": {
27 | "name": "nft",
28 | "description": "Non-fungible token"
29 | },
30 | "security-token": {
31 | "name": "security-token",
32 | "description": "Tokens that are used to gain access to an electronically restricted resource"
33 | },
34 | "utility-token": {
35 | "name": "utility-token",
36 | "description": "Tokens that are designed to be spent within a certain blockchain ecosystem"
37 | },
38 | "governance-token": {
39 | "name": "governance-token",
40 | "description": "Tokens that are designed to be use in community governance and maintenance"
41 | }
42 | },
43 | "timestamp": "2021-04-04T12:00:00+0000",
44 | "tokens": [],
45 | "version": {
46 | "major": 0,
47 | "minor": 1,
48 | "patch": 0
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/.github/workflows/sync-tokenlist.yml:
--------------------------------------------------------------------------------
1 | name: SYNC-TOKENLIST
2 | run-name: Daily Sync Token Lists
3 | on:
4 | # Schedule the workflow to run every 24 hours
5 | schedule:
6 | - cron: "0 0 * * *"
7 | # Allow manual triggering of the workflow
8 | workflow_dispatch:
9 | inputs:
10 | name:
11 | description: 'Reason for sync'
12 | required: true
13 | default: 'Manual sync'
14 | type: string
15 |
16 | permissions:
17 | contents: write
18 | pull-requests: write
19 |
20 | jobs:
21 | daily-sync:
22 | runs-on: ubuntu-latest
23 | steps:
24 | - name: Checkout
25 | uses: actions/checkout@v4
26 | with:
27 | token: ${{ secrets.GITHUB_TOKEN }}
28 | fetch-depth: 0
29 | - name: Checkout Fixes Tokenlist
30 | uses: actions/checkout@v4
31 | with:
32 | repository: 'fixes-world/token-list-jsons'
33 | token: ${{ secrets.GITHUB_TOKEN }}
34 | path: 'deps/fixes-token-list-jsons'
35 | fetch-depth: 0
36 | ref: 'main'
37 | - name: Setup Node.js
38 | uses: actions/setup-node@v4
39 | with:
40 | node-version: '18'
41 | cache: 'yarn'
42 | - name: Configure Git
43 | run: |
44 | git config --local user.name "GitHub Actions [Bot]"
45 | git config --local user.email "github-actions[bot]@users.noreply.github.com"
46 | - run: yarn
47 | - run: node src/utils/tokenlist-generator.js
48 | - run: yarn prettier --write src/tokens/*.json
49 | - name: Check Git Status and Commit
50 | # if any changes are made, we will commit and push them
51 | run: |
52 | git add ./src/tokens/*.json
53 | git status
54 | if git diff --staged --exit-code --quiet; then
55 | echo "No changes to commit"
56 | else
57 | git commit -m "Sync Token Lists at $(date)"
58 | git push https://${{ secrets.GITHUB_TOKEN }}@github.com/flowFans/flow-token-list.git
59 | fi
60 |
--------------------------------------------------------------------------------
/token-registry/A.348fe2042c8a70d8.MyToken/logo.svg:
--------------------------------------------------------------------------------
1 |
28 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # TypeScript v1 declaration files
45 | typings/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 |
78 | # Next.js build output
79 | .next
80 |
81 | # Nuxt.js build / generate output
82 | .nuxt
83 | dist
84 |
85 | # Gatsby files
86 | .cache/
87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
88 | # https://nextjs.org/blog/next-9-1#public-directory-support
89 | # public
90 |
91 | # vuepress build output
92 | .vuepress/dist
93 |
94 | # Serverless directories
95 | .serverless/
96 |
97 | # FuseBox cache
98 | .fusebox/
99 |
100 | # DynamoDB Local files
101 | .dynamodb/
102 |
103 | # TernJS port file
104 | .tern-port
105 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "incremental": true,
4 | "target": "es2017",
5 | "outDir": "dist/main",
6 | "rootDir": "src",
7 | "moduleResolution": "node",
8 | "module": "commonjs",
9 | "declaration": true,
10 | "inlineSourceMap": true,
11 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
12 | "resolveJsonModule": true /* Include modules imported with .json extension. */,
13 |
14 | "strict": true /* Enable all strict type-checking options. */,
15 |
16 | /* Strict Type-Checking Options */
17 | // "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
18 | // "strictNullChecks": true /* Enable strict null checks. */,
19 | // "strictFunctionTypes": true /* Enable strict checking of function types. */,
20 | // "strictPropertyInitialization": true /* Enable strict checking of property initialization in classes. */,
21 | // "noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */,
22 | // "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */,
23 |
24 | /* Additional Checks */
25 | "noUnusedLocals": true /* Report errors on unused locals. */,
26 | "noUnusedParameters": true /* Report errors on unused parameters. */,
27 | "noImplicitReturns": true /* Report error when not all code paths in function return a value. */,
28 | "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */,
29 |
30 | /* Debugging Options */
31 | "traceResolution": false /* Report module resolution log messages. */,
32 | "listEmittedFiles": false /* Print names of generated files part of the compilation. */,
33 | "listFiles": false /* Print names of files part of the compilation. */,
34 | "pretty": true /* Stylize errors and messages using color and context. */,
35 |
36 | /* Experimental Options */
37 | // "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */,
38 | // "emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */,
39 |
40 | "lib": ["es2017"],
41 | "types": ["node"],
42 | "typeRoots": ["node_modules/@types", "src/types"]
43 | },
44 | "include": ["src/**/*.ts"],
45 | "exclude": ["node_modules/**"],
46 | "compileOnSave": false
47 | }
48 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "flow-native-token-registry",
3 | "version": "0.1.3",
4 | "description": "Flow native token registry",
5 | "scripts": {
6 | "test": "run-s build test:*",
7 | "test:lint": "eslint src --ext .ts",
8 | "test:unit": "nyc --silent ava",
9 | "build": "run-p build:*",
10 | "build:main": "tsc -p tsconfig.json",
11 | "build:module": "tsc -p tsconfig.module.json",
12 | "generate": "node src/utils/tokenlist-generator.js",
13 | "prepare": "husky install"
14 | },
15 | "repository": {
16 | "type": "git",
17 | "url": "git+https://github.com/FlowFans/flow-token-list.git"
18 | },
19 | "author": "",
20 | "license": "Apache",
21 | "bugs": {
22 | "url": "https://github.com/FlowFans/flow-token-list/issues"
23 | },
24 | "homepage": "https://github.com/FlowFans/flow-token-list#readme",
25 | "engines": {
26 | "node": ">=10"
27 | },
28 | "main": "dist/main/index.js",
29 | "typings": "dist/main/index.d.ts",
30 | "module": "dist/module/index.js",
31 | "files": [
32 | "dist/main",
33 | "dist/module",
34 | "!**/*.spec.*",
35 | "CHANGELOG.md",
36 | "LICENSE",
37 | "README.md"
38 | ],
39 | "devDependencies": {
40 | "@ava/typescript": "^1.1.1",
41 | "@istanbuljs/nyc-config-typescript": "^1.0.1",
42 | "@types/node": "^15.0.2",
43 | "@typescript-eslint/eslint-plugin": "^4.0.1",
44 | "@typescript-eslint/parser": "^4.0.1",
45 | "ava": "^3.12.1",
46 | "codecov": "^3.5.0",
47 | "cspell": "^4.1.0",
48 | "cz-conventional-changelog": "^3.3.0",
49 | "eslint": "^7.8.0",
50 | "eslint-config-prettier": "^6.11.0",
51 | "eslint-plugin-eslint-comments": "^3.2.0",
52 | "eslint-plugin-functional": "^3.0.2",
53 | "gh-pages": "^3.1.0",
54 | "npm-run-all": "^4.1.5",
55 | "nyc": "^15.1.0",
56 | "open-cli": "^6.0.1",
57 | "req": "^0.1.4",
58 | "eslint-plugin-import": "^2.26.0",
59 | "husky": "^7.0.0",
60 | "npx": "^10.2.2",
61 | "prettier": "2.6.2",
62 | "pretty-quick": "^3.1.3",
63 | "standard-version": "^9.3.2",
64 | "ts-node": "^10.7.0",
65 | "typedoc": "^0.22.13",
66 | "typescript": "^4.6.3"
67 | },
68 | "ava": {
69 | "failFast": true,
70 | "timeout": "60s",
71 | "typescript": {
72 | "rewritePaths": {
73 | "src/": "dist/main/"
74 | }
75 | },
76 | "files": [
77 | "!dist/module/**"
78 | ]
79 | },
80 | "config": {
81 | "commitizen": {
82 | "path": "cz-conventional-changelog"
83 | }
84 | },
85 | "prettier": {
86 | "singleQuote": true
87 | },
88 | "dependencies": {
89 | "cross-fetch": "^3.1.5"
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/token-registry/A.f1ab99c82dee3526.USDCFlow/USDCf.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/src/utils/tokenlist-generator.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | const REGISTRY = 'token-registry';
5 | const TEMPLATE_TOKEN_LIST_PATH = 'token-registry/template.tokenlist.json';
6 | const MAINNET_TOKEN_LIST_PATH = 'src/tokens/flow-mainnet.tokenlist.json';
7 | const TESTNET_TOKEN_LIST_PATH = 'src/tokens/flow-testnet.tokenlist.json';
8 |
9 | const FIX_MAINNET_JSON_PATH =
10 | 'deps/fixes-token-list-jsons/jsons/mainnet/flow/default.json';
11 |
12 | const tokenDirs = fs.readdirSync(REGISTRY);
13 |
14 | const mainnetTokenList = generateTokenList(tokenDirs, 'mainnet');
15 | if (mainnetTokenList) {
16 | mainnetTokenList.timestamp = new Date().toISOString();
17 | fs.writeFileSync(
18 | MAINNET_TOKEN_LIST_PATH,
19 | JSON.stringify(mainnetTokenList, null, 2)
20 | );
21 | } else {
22 | console.log('[mainnet] no change');
23 | }
24 |
25 | const testnetTokenList = generateTokenList(tokenDirs, 'testnet');
26 | if (testnetTokenList) {
27 | testnetTokenList.timestamp = new Date().toISOString();
28 | fs.writeFileSync(
29 | TESTNET_TOKEN_LIST_PATH,
30 | JSON.stringify(testnetTokenList, null, 2)
31 | );
32 | } else {
33 | console.log('[testnet] no change');
34 | }
35 |
36 | function generateTokenList(tokenDirs, network) {
37 | let tokenFile = 'token.json';
38 | let templateListPath = TEMPLATE_TOKEN_LIST_PATH;
39 | let originListPath = MAINNET_TOKEN_LIST_PATH;
40 | if (network == 'testnet') {
41 | tokenFile = 'testnet.token.json';
42 | originListPath = TESTNET_TOKEN_LIST_PATH;
43 | }
44 |
45 | // read origin list
46 | const originList = JSON.parse(fs.readFileSync(originListPath));
47 |
48 | let fixesJson = undefined;
49 | // merge with fix json
50 | if (network == 'mainnet') {
51 | // check if FIX_MAINNET_JSON exists
52 | if (fs.existsSync(FIX_MAINNET_JSON_PATH)) {
53 | fixesJson = JSON.parse(fs.readFileSync(FIX_MAINNET_JSON_PATH));
54 | }
55 | }
56 |
57 | const baseList = JSON.parse(fs.readFileSync(templateListPath));
58 | baseList.tokens = [];
59 | baseList.version = originList.version;
60 | baseList.timestamp = originList.timestamp;
61 |
62 | const localList = tokenDirs.sort().reduce((acc, file) => {
63 | const tokenPath = path.join(REGISTRY, file);
64 | if (fs.existsSync(tokenPath) && fs.lstatSync(tokenPath).isDirectory()) {
65 | const listPath = path.join(tokenPath, tokenFile);
66 | if (fs.existsSync(listPath)) {
67 | const token = JSON.parse(fs.readFileSync(listPath));
68 | acc.tokens.push(token);
69 | }
70 | }
71 | return acc;
72 | }, baseList);
73 |
74 | if (!fixesJson) {
75 | newList = localList;
76 | } else {
77 | newList = fixesJson;
78 | newList.tokens = fixesJson.tokens.map((fixToken) => {
79 | const localToken = localList.tokens.find((token) => {
80 | return (
81 | token.address.toLowerCase() == fixToken.address.toLowerCase() &&
82 | token.contractName == fixToken.contractName
83 | );
84 | });
85 | if (localToken) {
86 | fixToken.logoURI = localToken.logoURI;
87 | fixToken.extensions = Object.assign(
88 | {},
89 | fixToken.extensions,
90 | localToken.extensions
91 | );
92 | }
93 | return fixToken;
94 | });
95 | }
96 |
97 | if (JSON.stringify(newList.tokens) == JSON.stringify(originList.tokens)) {
98 | // No change
99 | return null;
100 | }
101 |
102 | const newTokens = newList.tokens.map((token) => {
103 | return `${token.address}-${token.contractName}`;
104 | });
105 | const origTokens = originList.tokens.map((token) => {
106 | return `${token.address}-${token.contractName}`;
107 | });
108 | const newTokensSet = new Set(newTokens);
109 | const origTokensSet = new Set(origTokens);
110 |
111 | const newTokenAdded = difference(newTokensSet, origTokensSet).size > 0;
112 | const oldTokenDeleted = difference(origTokensSet, newTokensSet).size > 0;
113 |
114 | if (oldTokenDeleted) {
115 | newList.version.major = originList.version.major + 1;
116 | newList.version.minor = 0;
117 | newList.version.patch = 0;
118 | } else if (newTokenAdded) {
119 | newList.version.major = originList.version.major;
120 | newList.version.minor = originList.version.minor + 1;
121 | newList.version.patch = 0;
122 | } else {
123 | newList.version.major = originList.version.major;
124 | newList.version.minor = originList.version.minor;
125 | newList.version.patch = originList.version.patch + 1;
126 | }
127 |
128 | return newList;
129 | }
130 |
131 | function difference(setA, setB) {
132 | let _difference = new Set(setA);
133 | for (let elem of setB) {
134 | _difference.delete(elem);
135 | }
136 | return _difference;
137 | }
138 |
--------------------------------------------------------------------------------
/src/schemas/tokenlist.schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "$id": "src/schemas/tokenlist",
4 | "title": "Flow Token List Schema",
5 | "description": "Schema for lists of Flow fungible tokens",
6 | "definitions": {
7 | "Version": {
8 | "type": "object",
9 | "description": "The version of the list, used in change detection",
10 | "examples": [
11 | {
12 | "major": 1,
13 | "minor": 0,
14 | "patch": 0
15 | }
16 | ],
17 | "additionalProperties": false,
18 | "properties": {
19 | "major": {
20 | "type": "integer",
21 | "description": "The major version of the list. Must be incremented when tokens are removed from the list or token addresses are changed.",
22 | "minimum": 0,
23 | "examples": [1, 2]
24 | },
25 | "minor": {
26 | "type": "integer",
27 | "description": "The minor version of the list. Must be incremented when tokens are added to the list.",
28 | "minimum": 0,
29 | "examples": [0, 1]
30 | },
31 | "patch": {
32 | "type": "integer",
33 | "description": "The patch version of the list. Must be incremented for any changes to the list.",
34 | "minimum": 0,
35 | "examples": [0, 1]
36 | }
37 | },
38 | "required": ["major", "minor", "patch"]
39 | },
40 | "TagIdentifier": {
41 | "type": "string",
42 | "description": "The unique identifier of a tag",
43 | "minLength": 1,
44 | "maxLength": 20,
45 | "pattern": "^[\\-\\w]+$",
46 | "examples": ["compound", "stablecoin"]
47 | },
48 | "TagDefinition": {
49 | "type": "object",
50 | "description": "Definition of a tag that can be associated with a token via its identifier",
51 | "additionalProperties": false,
52 | "properties": {
53 | "name": {
54 | "type": "string",
55 | "description": "The name of the tag",
56 | "pattern": "^[ \\-\\w]+$",
57 | "minLength": 1,
58 | "maxLength": 20
59 | },
60 | "description": {
61 | "type": "string",
62 | "description": "A user-friendly description of the tag",
63 | "pattern": "^[ \\-\\w\\.,:]+$",
64 | "minLength": 1,
65 | "maxLength": 200
66 | }
67 | },
68 | "required": ["name", "description"],
69 | "examples": [
70 | {
71 | "name": "Stablecoin",
72 | "description": "A token with value pegged to another asset"
73 | }
74 | ]
75 | }
76 | },
77 | "type": "object",
78 | "additionalProperties": false,
79 | "properties": {
80 | "name": {
81 | "type": "string",
82 | "description": "The name of the token list",
83 | "minLength": 1,
84 | "maxLength": 20,
85 | "pattern": "^[\\w ]+$",
86 | "examples": ["My Token List"]
87 | },
88 | "timestamp": {
89 | "type": "string",
90 | "format": "date-time",
91 | "description": "The timestamp of this list version; i.e. when this immutable version of the list was created"
92 | },
93 | "version": {
94 | "$ref": "#/definitions/Version"
95 | },
96 | "tokens": {
97 | "type": "array",
98 | "description": "The list of tokens included in the list",
99 | "items": {
100 | "$ref": "token.schema.json"
101 | },
102 | "minItems": 1,
103 | "maxItems": 10000
104 | },
105 | "keywords": {
106 | "type": "array",
107 | "description": "Keywords associated with the contents of the list; may be used in list discoverability",
108 | "items": {
109 | "type": "string",
110 | "description": "A keyword to describe the contents of the list",
111 | "minLength": 1,
112 | "maxLength": 20,
113 | "pattern": "^[\\w ]+$",
114 | "examples": ["compound", "lending", "personal tokens"]
115 | },
116 | "maxItems": 20,
117 | "uniqueItems": true
118 | },
119 | "tags": {
120 | "type": "object",
121 | "description": "A mapping of tag identifiers to their name and description",
122 | "propertyNames": {
123 | "$ref": "#/definitions/TagIdentifier"
124 | },
125 | "additionalProperties": {
126 | "$ref": "#/definitions/TagDefinition"
127 | },
128 | "maxProperties": 20,
129 | "examples": [
130 | {
131 | "stablecoin": {
132 | "name": "Stablecoin",
133 | "description": "A token with value pegged to another asset"
134 | }
135 | }
136 | ]
137 | },
138 | "logoURI": {
139 | "type": "string",
140 | "description": "A URI for the logo of the token list; prefer SVG or PNG of size 256x256",
141 | "format": "uri",
142 | "examples": ["ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM"]
143 | }
144 | },
145 | "required": ["name", "timestamp", "version", "tokens"]
146 | }
147 |
--------------------------------------------------------------------------------
/src/lib/tokenlist.ts:
--------------------------------------------------------------------------------
1 | import { fetch } from 'cross-fetch';
2 |
3 | import tokenlistMainnet from './../tokens/flow-mainnet.tokenlist.json';
4 | import tokenlistTestnet from './../tokens/flow-testnet.tokenlist.json';
5 |
6 | export enum ENV {
7 | Mainnet = 'mainnet',
8 | Testnet = 'testnet',
9 | }
10 |
11 | export interface TokenList {
12 | readonly name: string;
13 | readonly logoURI: string;
14 | readonly tags: { [tag: string]: TagDetails };
15 | readonly timestamp: string;
16 | readonly tokens: TokenInfo[];
17 | }
18 |
19 | export interface TagDetails {
20 | readonly name: string;
21 | readonly description: string;
22 | }
23 |
24 | export interface PathDetail {
25 | readonly vault: string;
26 | readonly receiver: string;
27 | readonly balance: string;
28 | }
29 |
30 | export interface TokenExtensions {
31 | readonly website?: string;
32 | readonly documentation?: string;
33 | readonly bridgeContract?: string;
34 | readonly assetContract?: string;
35 | readonly address?: string;
36 | readonly explorer?: string;
37 | readonly twitter?: string;
38 | readonly github?: string;
39 | readonly medium?: string;
40 | readonly tgann?: string;
41 | readonly tggroup?: string;
42 | readonly discord?: string;
43 | readonly coingeckoId?: string;
44 | readonly imageUrl?: string;
45 | readonly description?: string;
46 | }
47 |
48 | export interface TokenInfo {
49 | readonly address: string;
50 | readonly name: string;
51 | readonly contractName: string;
52 | readonly decimals: number;
53 | readonly symbol: string;
54 | readonly path: PathDetail;
55 | readonly logoURI?: string;
56 | readonly tags?: string[];
57 | readonly extensions?: TokenExtensions;
58 | }
59 |
60 | export type TokenInfoMap = Map;
61 |
62 | export const CLUSTER_SLUGS: { [id: string]: ENV } = {
63 | mainnet: ENV.Mainnet,
64 | testnet: ENV.Testnet,
65 | };
66 |
67 | export class GitHubTokenListResolutionStrategy {
68 | repositories = {
69 | [ENV.Mainnet]: [
70 | 'https://raw.githubusercontent.com/FlowFans/flow-token-list/main/src/tokens/flow-mainnet.tokenlist.json',
71 | ],
72 | [ENV.Testnet]: [
73 | 'https://raw.githubusercontent.com/FlowFans/flow-token-list/main/src/tokens/flow-testnet.tokenlist.json',
74 | ],
75 | };
76 |
77 | resolve = (network: ENV = ENV.Mainnet) => {
78 | return queryJsonFiles(this.repositories[network]);
79 | };
80 | }
81 |
82 | export class CDNTokenListResolutionStrategy {
83 | repositories = {
84 | [ENV.Mainnet]: [
85 | 'https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/src/tokens/flow-mainnet.tokenlist.json',
86 | ],
87 | [ENV.Testnet]: [
88 | 'https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/src/tokens/flow-testnet.tokenlist.json',
89 | ],
90 | };
91 | resolve = (network: ENV = ENV.Mainnet) => {
92 | return queryJsonFiles(this.repositories[network]);
93 | };
94 | }
95 |
96 | const queryJsonFiles = async (files: string[], network: ENV = ENV.Mainnet) => {
97 | const responses: TokenList[] = (await Promise.all(
98 | files.map(async (repo) => {
99 | try {
100 | const response = await fetch(repo);
101 | const json = (await response.json()) as TokenList;
102 | return json;
103 | } catch {
104 | console.info(
105 | `@flowfans/flow-native-token-registry: falling back to static repository.`
106 | );
107 |
108 | return network === ENV.Mainnet ? tokenlistMainnet : tokenlistTestnet;
109 | }
110 | })
111 | )) as TokenList[];
112 |
113 | return responses
114 | .map((tokenlist: TokenList) => tokenlist.tokens)
115 | .reduce((acc, arr) => (acc as TokenInfo[]).concat(arr), []);
116 | };
117 |
118 | export enum Strategy {
119 | GitHub = 'GitHub',
120 | Static = 'Static',
121 | CDN = 'CDN',
122 | }
123 |
124 | export class StaticTokenListResolutionStrategy {
125 | resolve = (network: ENV = ENV.Mainnet) => {
126 | if (network === ENV.Mainnet) return tokenlistMainnet.tokens;
127 | return tokenlistTestnet.tokens;
128 | };
129 | }
130 |
131 | export class TokenListProvider {
132 | static strategies = {
133 | [Strategy.GitHub]: new GitHubTokenListResolutionStrategy(),
134 | [Strategy.Static]: new StaticTokenListResolutionStrategy(),
135 | [Strategy.CDN]: new CDNTokenListResolutionStrategy(),
136 | };
137 |
138 | resolve = async (
139 | strategy: Strategy = Strategy.GitHub,
140 | network: ENV = ENV.Mainnet
141 | ): Promise => {
142 | return new TokenListContainer(
143 | await TokenListProvider.strategies[strategy].resolve(network)
144 | );
145 | };
146 | }
147 |
148 | export class TokenListContainer {
149 | constructor(private tokenList: TokenInfo[]) {}
150 |
151 | filterByTag = (tag: string) => {
152 | return new TokenListContainer(
153 | this.tokenList.filter((item) => (item.tags || []).includes(tag))
154 | );
155 | };
156 |
157 | excludeByTag = (tag: string) => {
158 | return new TokenListContainer(
159 | this.tokenList.filter((item) => !(item.tags || []).includes(tag))
160 | );
161 | };
162 |
163 | getList = () => {
164 | return this.tokenList;
165 | };
166 | }
167 |
--------------------------------------------------------------------------------
/src/tokens/flow-testnet.tokenlist.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Flow Token List",
3 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.1654653399040a61.FlowToken/logo.svg",
4 | "keywords": ["flow", "fnt"],
5 | "tags": {
6 | "stablecoin": {
7 | "name": "stablecoin",
8 | "description": "Tokens that are fixed to an external asset, e.g. the US dollar"
9 | },
10 | "ethereum": {
11 | "name": "ethereum",
12 | "description": "Asset bridged from ethereum"
13 | },
14 | "teleported-token": {
15 | "name": "teleported-token",
16 | "description": "Asset teleported from other blockchains by Blocto"
17 | },
18 | "wrapped-celer": {
19 | "name": "wrapped-celer",
20 | "description": "Asset wrapped using celer bridge"
21 | },
22 | "lp-token": {
23 | "name": "lp-token",
24 | "description": "Asset representing liquidity provider token"
25 | },
26 | "nft": {
27 | "name": "nft",
28 | "description": "Non-fungible token"
29 | },
30 | "security-token": {
31 | "name": "security-token",
32 | "description": "Tokens that are used to gain access to an electronically restricted resource"
33 | },
34 | "utility-token": {
35 | "name": "utility-token",
36 | "description": "Tokens that are designed to be spent within a certain blockchain ecosystem"
37 | },
38 | "governance-token": {
39 | "name": "governance-token",
40 | "description": "Tokens that are designed to be use in community governance and maintenance"
41 | }
42 | },
43 | "timestamp": "2023-11-05T13:43:33.592Z",
44 | "tokens": [
45 | {
46 | "address": "0x7e60df042a9c0868",
47 | "contractName": "FlowToken",
48 | "path": {
49 | "vault": "/storage/flowTokenVault",
50 | "balance": "/public/flowTokenBalance",
51 | "receiver": "/public/flowTokenReceiver"
52 | },
53 | "symbol": "FLOW",
54 | "name": "Flow",
55 | "decimals": 8,
56 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.1654653399040a61.FlowToken/logo.svg",
57 | "tags": ["utility-token"],
58 | "extensions": {
59 | "coingeckoId": "flow",
60 | "website": "https://www.onflow.org",
61 | "twitter": "https://twitter.com/flow_blockchain",
62 | "discord": "http://discord.gg/flow",
63 | "github": "https://github.com/onflow/flow-core-contracts",
64 | "documentation": "https://developers.flow.com/references/core-contracts/flow-token"
65 | }
66 | },
67 | {
68 | "address": "0xe223d8a629e49c68",
69 | "contractName": "FUSD",
70 | "path": {
71 | "vault": "/storage/fusdVault",
72 | "balance": "/public/fusdBalance",
73 | "receiver": "/public/fusdReceiver"
74 | },
75 | "symbol": "FUSD",
76 | "name": "Flow USD",
77 | "decimals": 8,
78 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.3c5959b568896393.FUSD/logo.svg",
79 | "tags": ["stablecoin"],
80 | "extensions": {
81 | "website": "https://docs.onflow.org/fusd/"
82 | }
83 | },
84 | {
85 | "address": "0x789550432627e16c",
86 | "contractName": "OriginToken",
87 | "path": {
88 | "vault": "/storage/originTicketVault",
89 | "balance": "/public/originTicketBalance",
90 | "receiver": "/public/originTicketReceiver"
91 | },
92 | "symbol": "OT",
93 | "name": "Origin Token",
94 | "decimals": 8,
95 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.789550432627e16c.OriginToken/logo.svg",
96 | "tags": ["utility-token"],
97 | "extensions": {
98 | "website": "http://testnet.origin30.com/"
99 | }
100 | },
101 | {
102 | "address": "0x9392a4a7c3f49a0b",
103 | "contractName": "FlovatarDustToken",
104 | "path": {
105 | "vault": "/storage/FlovatarDustTokenVault",
106 | "balance": "/public/FlovatarDustTokenBalance",
107 | "receiver": "/public/FlovatarDustTokenReceiver"
108 | },
109 | "symbol": "DUST",
110 | "name": "Flovatar ÐUST",
111 | "decimals": 8,
112 | "logoURI": "http://images.flovatar.com/logo-round.png",
113 | "tags": ["utility-token"],
114 | "extensions": {
115 | "website": "https://flovatar.com/"
116 | }
117 | },
118 | {
119 | "address": "0xa983fecbed621163",
120 | "contractName": "FiatToken",
121 | "path": {
122 | "vault": "/storage/USDCVault",
123 | "balance": "/public/USDCVaultBalance",
124 | "receiver": "/public/USDCVaultReceiver"
125 | },
126 | "symbol": "USDC",
127 | "name": "USD Coin",
128 | "decimals": 8,
129 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/A.b19436aae4d94622.FiatToken/logo.svg",
130 | "tags": ["stablecoin"],
131 | "extensions": {
132 | "website": "https://www.circle.com/en/usdc-multichain/flow",
133 | "coingeckoId": "usd-coin",
134 | "documentation": "https://developers.circle.com/stablecoins/docs",
135 | "twitter": "https://twitter.com/circle"
136 | }
137 | }
138 | ],
139 | "version": {
140 | "major": 2,
141 | "minor": 1,
142 | "patch": 0
143 | }
144 | }
145 |
--------------------------------------------------------------------------------
/src/schemas/token.schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "$id": "src/schemas/token.schema.json",
4 | "type": "object",
5 | "description": "Metadata for a single token in a token list",
6 | "additionalProperties": false,
7 | "examples": [
8 | {
9 | "address": "0x1654653399040a61",
10 | "contractName": "FlowToken",
11 | "path": {
12 | "vault": "/storage/flowTokenVault",
13 | "balance": "/public/flowTokenBalance",
14 | "receiver": "/public/flowTokenReceiver"
15 | },
16 | "symbol": "FLOW",
17 | "name": "Flow",
18 | "decimals": 8,
19 | "logoURI": "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/FLOW/logo.svg",
20 | "tags": ["utility-token"],
21 | "extensions": {
22 | "website": "https://www.onflow.org",
23 | "twitter": "https://twitter.com/flow_blockchain",
24 | "discord": "http://discord.gg/flow"
25 | }
26 | }
27 | ],
28 | "definitions": {
29 | "TagIdentifier": {
30 | "type": "string",
31 | "description": "The unique identifier of a tag",
32 | "minLength": 1,
33 | "maxLength": 50,
34 | "pattern": "^[\\-\\w]+$",
35 | "examples": ["compound", "stablecoin"]
36 | }
37 | },
38 | "properties": {
39 | "address": {
40 | "description": "The contract address",
41 | "examples": ["0x1654653399040a61"],
42 | "pattern": "^0x[0-9a-f]{16}$",
43 | "type": "string"
44 | },
45 | "contractName": {
46 | "description": "The name of the token contract",
47 | "examples": ["FlowToken"],
48 | "minLength": 1,
49 | "maxLength": 50,
50 | "pattern": "^[a-zA-Z0-9+\\-%/$.]+$",
51 | "type": "string"
52 | },
53 | "path": {
54 | "type": "object",
55 | "description": "The paths of the vault",
56 | "examples": [
57 | {
58 | "vault": "/storage/flowTokenVault",
59 | "balance": "/public/flowTokenBalance",
60 | "receiver": "/public/flowTokenReceiver"
61 | }
62 | ],
63 | "required": ["vault", "balance", "receiver"],
64 | "properties": {
65 | "vault": {
66 | "type": "string",
67 | "description": "The path of Provider",
68 | "pattern": "^/storage/[a-zA-Z0-9+\\-%/$.]+$",
69 | "examples": ["/storage/flowTokenVault"]
70 | },
71 | "balance": {
72 | "type": "string",
73 | "description": "The path of Balance",
74 | "pattern": "^/public/[a-zA-Z0-9+\\-%/$.]+$",
75 | "examples": ["/public/flowTokenBalance"]
76 | },
77 | "receiver": {
78 | "type": "string",
79 | "description": "The path of Receiver",
80 | "pattern": "^/public/[a-zA-Z0-9+\\-%/$.]+$",
81 | "examples": ["/public/flowTokenReceiver"]
82 | }
83 | },
84 | "additionalProperties": false
85 | },
86 | "symbol": {
87 | "type": "string",
88 | "description": "The symbol for the token; must be alphanumeric",
89 | "pattern": "^[a-zA-Z0-9+\\-%/$.]+$",
90 | "minLength": 1,
91 | "maxLength": 20,
92 | "examples": ["FLOW"]
93 | },
94 | "name": {
95 | "type": "string",
96 | "description": "The name of the token",
97 | "minLength": 1,
98 | "maxLength": 40,
99 | "pattern": "^[ \\w.'+\\-%/À-ÖØ-öø-ÿ:&\\[\\]\\(\\)]+$",
100 | "examples": ["Flow"]
101 | },
102 | "decimals": {
103 | "type": "integer",
104 | "description": "The number of decimals for the token balance",
105 | "minimum": 0,
106 | "maximum": 255,
107 | "examples": [8]
108 | },
109 | "logoURI": {
110 | "type": "string",
111 | "description": "A URI to the token logo asset; if not set, interface will attempt to find a logo based on the token address; suggest SVG or PNG of size 64x64",
112 | "format": "uri",
113 | "examples": [
114 | "https://cdn.jsdelivr.net/gh/FlowFans/flow-token-list@main/token-registry/FLOW/logo.svg"
115 | ]
116 | },
117 | "tags": {
118 | "type": "array",
119 | "description": "An array of tag identifiers associated with the token; tags are defined at the list level",
120 | "items": {
121 | "$ref": "#/definitions/TagIdentifier"
122 | },
123 | "maxItems": 10,
124 | "examples": ["stablecoin", "compound"]
125 | },
126 | "extensions": {
127 | "type": "object",
128 | "properties": {
129 | "website": {
130 | "type": "string",
131 | "format": "uri"
132 | },
133 | "twitter": {
134 | "type": "string",
135 | "format": "uri"
136 | },
137 | "discord": {
138 | "type": "string",
139 | "format": "uri"
140 | },
141 | "explorer": {
142 | "type": "string",
143 | "format": "uri"
144 | },
145 | "github": {
146 | "type": "string",
147 | "format": "uri"
148 | },
149 | "medium": {
150 | "type": "string",
151 | "format": "uri"
152 | },
153 | "tgann": {
154 | "type": "string",
155 | "format": "uri"
156 | },
157 | "tggroup": {
158 | "type": "string",
159 | "format": "uri"
160 | },
161 | "address": {
162 | "type": "string"
163 | },
164 | "bridgeContract": {
165 | "type": "string"
166 | },
167 | "assetContract": {
168 | "type": "string"
169 | },
170 | "imageUrl": {
171 | "type": "string"
172 | },
173 | "description": {
174 | "type": "string"
175 | },
176 | "coingeckoId": {
177 | "type": "string",
178 | "minLength": 1,
179 | "maxLength": 50,
180 | "pattern": "^[\\-\\w]+$"
181 | }
182 | },
183 | "required": [],
184 | "additionalProperties": false
185 | }
186 | },
187 | "required": ["address", "contractName", "path", "symbol", "name", "decimals"]
188 | }
189 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | > # Deprecated
2 | > ## please use instead.
3 | > ### The JSON files repo of TokoenList is
4 | > The JSON files of this project will also automatically synchronize the JSON data from to ensure that projects previously using this repo can obtain the latest token updates correctly.
5 |
6 | ---
7 |
8 | # Flow Native Token List (Deprecated)
9 |
10 | The community maintained Flow native token registry.
11 |
12 | Following the Uniswap Token List specification found here:
13 |
14 | ## How to fetch Flow native token list
15 |
16 | Mainnet:
17 |
18 | - From github:
19 | - From jsdelivr CDN:
20 |
21 | Testnet:
22 |
23 | - From github:
24 | - From jsdelivr CDN:
25 |
26 | ## Using NPM package
27 |
28 | ### Installation
29 |
30 | ```bash
31 | npm install flow-native-token-registry
32 | ```
33 |
34 | ```bash
35 | yarn add flow-native-token-registry
36 | ```
37 |
38 | ### Examples
39 |
40 | #### Query available tokens
41 |
42 | ```typescript
43 | import { TokenListProvider } from 'flow-native-token-registry';
44 |
45 | new TokenListProvider().resolve().then((tokens) => {
46 | const tokenList = tokens.filterByTag('nft').getList();
47 | console.log(tokenList);
48 | });
49 | ```
50 |
51 | #### Render icon for token in React
52 |
53 | ```typescript jsx
54 | import React, { useEffect, useState } from 'react';
55 | import { TokenListProvider, TokenInfo } from 'flow-native-token-registry';
56 |
57 |
58 | export const Icon = () => {
59 | const [tokenMap, setTokenMap] = useState