@adacash/token-lists 中文文档教程
Adacash/token-lists (beta)
这个包包括一个用于令牌列表的 JSON 架构,以及用于处理令牌列表的 TypeScript 实用程序。
JSON 模式表示可在 dApp 界面(例如 Adacash 界面)中使用的代币列表的技术规范。
What are token lists?
Adacash 代币列表是代币元数据列表(例如地址、小数……)的规范,任何需要一个或多个代币列表的 dApp 接口都可以使用它。
只要遵循规范,任何人都可以创建和维护代币列表。
具体来说,令牌列表的一个实例是一个 JSON blob,其中包含一个列表 ERC20 用于 dApp 用户界面的令牌元数据。 令牌列表 JSON 必须针对 JSON 模式 进行验证,以便在 Adacash 接口中使用。 令牌列表上的令牌和令牌列表本身都被标记,以便用户可以轻松找到令牌。
Validating token lists
此包不包含用于令牌列表验证的代码。 您可以通过包含一个库来轻松地做到这一点,例如 ajv 针对 JSON 架构执行验证。 模式从包中导出 为了便于使用。
Authoring token lists
Manual
手动编写令牌列表的最佳方式是使用支持 JSON 模式验证的编辑器。 最受欢迎 代码编辑器可以,例如 IntelliJ 或 VSCode。 其他编辑 可以在此处找到。
该模式在 SchemaStore 中注册,任何匹配的文件 模式 *.tokenlist.json
应该 自动利用 支持的文本编辑器的 JSON 架构。
为了能够使用您的令牌列表,它必须通过所有 JSON 架构验证。
Automated
如果您想自动化令牌列表,例如通过从智能合约或其他来源中提取,您可以使用这个 npm 包以利用 JSON 模式进行验证和 TypeScript 类型。 否则,您只是在使用 JSON。 所有常用工具都适用,例如:
import { TokenList, schema } from '@adacash/token-lists'
// generate your token list however you like.
const myList: TokenList = generateMyTokenList();
// use a tool like `ajv` to validate your generated token list
validateMyTokenList(myList, schema);
// print the resulting JSON to stdout
process.stdout.write(JSON.stringify(myList));
Semantic versioning
列表包含一个 version
字段,它遵循 语义版本控制。
列表版本必须遵循以下规则:
- Increment major version when tokens are removed
- Increment minor version when tokens are added
- Increment patch version when tokens already on the list have minor details changed (name, symbol, logo URL, decimals)
更改令牌地址或链 ID 被视为删除和添加,并且应该是主要版本更新。
注意list versioning 是用来提升用户体验的,不是为了安全,即list versions 不代表 提供防止恶意更新令牌列表的保护; 即列表 semver 用作有损压缩 列表更新的差异。 客户端 dApp 中的列表更新可能仍然存在差异。
Deploying your list
一旦创建了列表,就可以在任何 URI 上提供它。 更喜欢将你的列表固定到 IPFS (例如通过 pinata.cloud)并通过解析为 contenthash。
如果托管在 HTTPS 上,请确保端点配置为发送 access-control-allow-origin 标头以避免 CORS 错误。
Linking an ENS name to the list
可以通过 contenthash 文本记录将 ENS 名称分配给 IPFS 哈希。 这是引用列表的首选方式。
Examples
您可以在 test/schema/example.tokenlist.json 中找到令牌列表的简单示例。
在 test/schema/bigexample.tokenlist.json 中可以找到编码为令牌列表的 Adacash 默认列表的快照。
Adacash/token-lists (beta)
This package includes a JSON schema for token lists, and TypeScript utilities for working with token lists.
The JSON schema represents the technical specification for a token list which can be used in a dApp interface, such as the Adacash Interface.
What are token lists?
Adacash Token Lists is a specification for lists of token metadata (e.g. address, decimals, …) that can be used by any dApp interfaces that needs one or more lists of tokens.
Anyone can create and maintain a token list, as long as they follow the specification.
Specifically an instance of a token list is a JSON blob that contains a list of ERC20 token metadata for use in dApp user interfaces. Token list JSON must validate against the JSON schema in order to be used in the Adacash Interface. Tokens on token lists, and token lists themselves, are tagged so that users can easily find tokens.
Validating token lists
This package does not include code for token list validation. You can easily do this by including a library such as ajv to perform the validation against the JSON schema. The schema is exported from the package for ease of use.
Authoring token lists
Manual
The best way to manually author token lists is to use an editor that supports JSON schema validation. Most popular code editors do, such as IntelliJ or VSCode. Other editors can be found here.
The schema is registered in the SchemaStore, and any file that matches the pattern *.tokenlist.json
should automatically utilize the JSON schema for the supported text editors.
In order for your token list to be able to be used, it must pass all JSON schema validation.
Automated
If you want to automate token listing, e.g. by pulling from a smart contract, or other sources, you can use this npm package to take advantage of the JSON schema for validation and the TypeScript types. Otherwise, you are simply working with JSON. All the usual tools apply, e.g.:
import { TokenList, schema } from '@adacash/token-lists'
// generate your token list however you like.
const myList: TokenList = generateMyTokenList();
// use a tool like `ajv` to validate your generated token list
validateMyTokenList(myList, schema);
// print the resulting JSON to stdout
process.stdout.write(JSON.stringify(myList));
Semantic versioning
Lists include a version
field, which follows semantic versioning.
List versions must follow the rules:
- Increment major version when tokens are removed
- Increment minor version when tokens are added
- Increment patch version when tokens already on the list have minor details changed (name, symbol, logo URL, decimals)
Changing a token address or chain ID is considered both a remove and an add, and should be a major version update.
Note that list versioning is used to improve the user experience, but not for security, i.e. list versions are not meant to provide protection against malicious updates to a token list; i.e. the list semver is used as a lossy compression of the diff of list updates. List updates may still be diffed in the client dApp.
Deploying your list
Once you have authored the list, you can make it available at any URI. Prefer pinning your list to IPFS (e.g. via pinata.cloud) and referencing the list by an ENS name that resolves to the contenthash.
If hosted on HTTPS, make sure the endpoint is configured to send an access-control-allow-origin header to avoid CORS errors.
Linking an ENS name to the list
An ENS name can be assigned to an IPFS hash via the contenthash text record. This is the preferred way of referencing your list.
Examples
You can find a simple example of a token list in test/schema/example.tokenlist.json.
A snapshot of the Adacash default list encoded as a token list is found in test/schema/bigexample.tokenlist.json.