@0xsequence/collectible-lists 中文文档教程
@0xsequence/collectible-lists (beta)
这个包包括一个用于令牌列表的 JSON 架构,以及用于处理可收集列表的 TypeScript 实用程序。
JSON 模式表示可用于 dApp 接口(例如 Opensea 接口)的可收集列表的技术规范。
What are collectible lists?
Sequence Collectible Lists 是可收集代币元数据(例如地址、名称等)列表的规范,可由任何需要一个或多个可收集列表的 dApp 接口使用。 该规范是 https://github.com/Uniswap/token-lists 的一个分支,适用于符合 ERC-721 和 ERC-1155 令牌标准的令牌。
只要遵循规范,任何人都可以创建和维护收藏列表。
具体来说,令牌列表的一个实例是一个 JSON blob,其中包含一个列表 ERC-721 或 ERC-1155 用于 dApp 用户界面的令牌元数据。
注意:
- Token list JSON must validate against the JSON schema in order to be used.
- Tokens on collectible lists, and collectible lists themselves, are tagged so that users can more easily find collectibles.
- Names of tokens are not validated against any pattern to allow token names in multiple languages. It's up to collectible list creators to ensure information integrity
- Symbols of tokens are not validated against any pattern to allow token names in multiple languages. It's up to collectible list creators to ensure information integrity
JSON Schema $id
JSON 架构 ID 为 https://github.com/0xsequence/collectible -lists/blob/master/src/tokenlist.schema.json。
Validating token lists
此包不包含用于令牌列表验证的代码。 您可以通过包含一个库来轻松地做到这一点,例如 ajv 针对 JSON 架构执行验证。 模式从包中导出 为了便于使用。
Authoring token lists
Manual
手动编写令牌列表的最佳方式是使用支持 JSON 模式验证的编辑器。 最受欢迎 代码编辑器可以,例如 IntelliJ 或 VSCode。 其他编辑 可以在此处找到。
该模式在 SchemaStore 中注册,任何匹配的文件 模式 *.tokenlist.json
应该 自动利用 支持的文本编辑器的 JSON 架构。
为了能够使用您的令牌列表,它必须通过所有 JSON 架构验证。
Automated
如果您想自动化令牌列表,例如通过从智能合约或其他来源中提取,您可以使用这个 npm 包以利用 JSON 模式进行验证和 TypeScript 类型。 否则,您只是在使用 JSON。 所有常用工具都适用,例如:
import { CollectibleList, schema } from '@0xsequence/collectible-lists'
// generate your collectible list however you like.
const myList: CollectibleList = generateMyCollectibleList();
// use a tool like `ajv` to validate your generated token list
validateMyCollectibleList(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, metadataBaseURI)
更改令牌地址或链 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 中可以找到编码为标记列表的序列默认列表的快照。
@0xsequence/collectible-lists (beta)
This package includes a JSON schema for token lists, and TypeScript utilities for working with collectible lists.
The JSON schema represents the technical specification for a collectible list which can be used in a dApp interface, such as Opensea Interface.
What are collectible lists?
Sequence Collectible Lists is a specification for lists of collectible token metadata (e.g. address, name, …) that can be used by any dApp interfaces that needs one or more lists of collectibles. This specification is a fork of https://github.com/Uniswap/token-lists for tokens that comply with the ERC-721 and ERC-1155 token standards.
Anyone can create and maintain a collectible list, as long as they follow the specification.
Specifically an instance of a token list is a JSON blob that contains a list of ERC-721 or ERC-1155 token metadata for use in dApp user interfaces.
Notes:
- Token list JSON must validate against the JSON schema in order to be used.
- Tokens on collectible lists, and collectible lists themselves, are tagged so that users can more easily find collectibles.
- Names of tokens are not validated against any pattern to allow token names in multiple languages. It's up to collectible list creators to ensure information integrity
- Symbols of tokens are not validated against any pattern to allow token names in multiple languages. It's up to collectible list creators to ensure information integrity
JSON Schema $id
The JSON schema ID is https://github.com/0xsequence/collectible-lists/blob/master/src/tokenlist.schema.json.
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 { CollectibleList, schema } from '@0xsequence/collectible-lists'
// generate your collectible list however you like.
const myList: CollectibleList = generateMyCollectibleList();
// use a tool like `ajv` to validate your generated token list
validateMyCollectibleList(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, metadataBaseURI)
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 Sequence default list encoded as a token list is found in test/schema/bigexample.tokenlist.json.